문제풀이/BOJ

[Python] BOJ/백준 10816번 숫자 카드 2

서채리 2021. 7. 28. 22:26

[문제]

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 


[풀이]

이분 탐색으로 푸는 방법도 있지만 해쉬 자료구조를 이용해 풀었다.

 

상근이가 갖고 있는 숫자 카드를 차례대로 한 개씩 뽑아 그 숫자가 hashmap 딕셔너리의 key에 있다면 value값을 1 증가시켜주고 숫자가 딕셔너리에 없다면 해당 key값을 추가시킨다.

 


[코드]

import sys

if __name__ == '__main__':
    n = int(sys.stdin.readline())
    N = map(int, sys.stdin.readline().split())
    m = int(sys.stdin.readline())
    M = map(int, sys.stdin.readline().split())

    hashmap = {}
    for i in N:
        if i in hashmap:
            hashmap[i] += 1
        else:
            hashmap[i] = 1

    print(' '.join(str(hashmap[x]) if x in hashmap else '0' for x in M))