import sys
n = int(sys.stdin.readline())
cards = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
check = list(map(int, sys.stdin.readline() .split()))
count = {}
for x in cards:
if x in count:
count[x] += 1
else:
count[x] = 1
for x in check:
if x in count:
print(count.get(x), end=" ")
else:
print(0, end=" ")
코드 설명
💡 시간 초과를 주의할 것!
해당 문제도 입력값의 범위가 굉장히 넓기 때문에 시간 초과의 위험이 있다.
for i in range(m):
print(cards.count(check[i]), end=" ")
위의 코드로 예제를 돌려도 PyCharm에서는 맞다고 나오지만, 입력값이 많아지면 시간 초과의 문제가 발생할 수 있다. 따라서 숫자마다 cards
리스트 전체를 검사하며 숫자를 세는 방식은 비효율적이다.
그래서 필자는 cards
리스트를 한 번만 돌면서 등장하는 횟수를 딕셔너리에 저장하는 방식을 이용했다.
만약 cards
에 들어있는 숫자가 count
딕셔너리에 있으면 그 값을 1 더 큰 값으로 갱신하고, 없다면 value 값을 1로 하여 딕션러ㅣ에 넣어준다.
출력할 때도 check
리스트에 들어있는 숫자가 count
딕셔너리에 있으면 그 숫자에 매칭되어있는 value값을 출력하고, 없으면 0을 출력하도록 한다.