# 풀이 (1): 딕셔너리 활용
import sys
n = int(sys.stdin.readline().strip())
cards = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline().strip())
targets = list(map(int, sys.stdin.readline().split()))
dict_cards = {}
for card in cards:
if card in dict_cards:
dict_cards[card] += 1
else:
dict_cards[card] = 1
for target in targets:
if target in dict_cards:
print(dict_cards[target], end=" ")
else:
print(0, end=" ")
딕셔너리의 get()를 활용하면, 위의 코드를 더 간결하게 만들 수 있다.
# 풀이 (2): 딕셔너리의 get() 활용
import sys
n = int(sys.stdin.readline().strip())
cards = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline().strip())
targets = list(map(int, sys.stdin.readline().split()))
dict_cards = {}
for card in cards:
dict_cards[card] = dict_cards.get(card, 0) + 1
for target in targets:
print(dict_cards.get(target, 0), end=" ")
여기서.. collections의 Counter 클래스까지 활용하면, 코드가 더 간결해진다.
# 풀이 (3): Counter 클래스 활용
import sys
from collections import Counter
n = int(sys.stdin.readline().strip())
cards = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline().strip())
targets = list(map(int, sys.stdin.readline().split()))
dict_cards = dict(Counter(cards))
for target in targets:
print(dict_cards.get(target, 0), end=" ")