jyamethyst21 님의 블로그

백준 10816번- '숫자 카드 2' (PYTHON 풀이) 본문

CODING 💻

백준 10816번- '숫자 카드 2' (PYTHON 풀이)

jyamethyst21 2025. 10. 16. 04:09

문제:

지난번 문제랑 비슷하다. 숫자 카드를 두개로 나눠서 저장하고 두번째로 입력받는 숫자카드를 기준으로 첫번째 입력받는 카드랑 겹치는지 세서 출력하면 된다.

 

풀이:

N = int(input())
dic1 = {}
li1 = list(map(int,input().split()))

M = int(input())
li2 = list(map(int,input().split()))

for i in li1:
    dic1[i] = dic1.get(i,0) + 1

result = []
for q in li2:
    result.append(dic1.get(q, 0))

print(*result)

시간초과를 피하려고 딕셔너리를 일부러 썼다.

우선 각 카드를 리스트로 입력받고 딕셔너리를 하나만 만들어서 리스트에 존재하는 각 값을 키로 저장한다. 그리고 이에 해당하는 값은 get함수를 활용해서 초기화해준다.

 

get 함수는 get(key,defalut) 형식을 갖는다. 즉 위 코드에서는 i가 딕셔너리에 존재하면 dic1[i]의 값을 반환하고 i가 존재하지 않으면 디폴트값인 0을 넣는다란 의미다. 1을 더하는 이유는 i가 이미 있을 땐 dic1[i] 값을 가져와서 1을 더하고, 처음 등장하면 0에서 1로 바꿔주기 위함이다. 이후 li2와 이미 개수를 세어놓은 dic1을 비교해서 result에 그대로 0을 유지하거나 1씩 더해주고 형식에 맞게 출력해주면 된다.

 

늦은 시간이라 그런지 집중이 잘 안되어서 유난히도 이 문제가 어려웠ㄷㅏ...