본문 바로가기

코딩테스트/BOJ

[백준/파이썬] 10816번: 숫자 카드 2 (Python)

문제

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

풀이

 - 자료구조, 이분탐색, 해시를 사용한 집합과 맵

 

상근이가 가지고 있는 숫자의 카드를 개수와 함께 딕셔너리에 담는다.

 

상근이가 가지고 있는 숫자 카드가 6 3 2 10 10 10 -10 -10 7 3 일 경우

 

딕셔너리에는 {6: 1, 3: 2, 2: 1, 10: 3, -10: 2, 7: 1} 로 담기게 된다.

 

주어진 숫자카드를 딕셔너리에서 key값을 찾아 value값을 출력하고, key가 존재하지 않으면 0을 출력 해 준다.

 

코드

n = int(input())
arr1 = list(map(int, input().split()))

dict1 = dict()
# 숫자카드와 개수를 딕셔너리에 담기
for i in arr1:
    if i in dict1:
        dict1[i] += 1
    else:
        dict1[i] = 1


m = int(input())
arr2 = list(map(int, input().split()))

for i in arr2:
    if i in dict1:
        print(dict1[i], end=' ')    # 존재하는 숫자 카드라면
    else:
        print(0, end=' ')           # 존재하지 않는 숫자 카드라면