Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 10816번- '숫자 카드 2' (PYTHON 풀이) 본문
문제:

지난번 문제랑 비슷하다. 숫자 카드를 두개로 나눠서 저장하고 두번째로 입력받는 숫자카드를 기준으로 첫번째 입력받는 카드랑 겹치는지 세서 출력하면 된다.
풀이:
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씩 더해주고 형식에 맞게 출력해주면 된다.
늦은 시간이라 그런지 집중이 잘 안되어서 유난히도 이 문제가 어려웠ㄷㅏ...
'CODING 💻' 카테고리의 다른 글
| 백준 11478번- '서로 다른 부분 문자열의 개수' (PYTHON 풀이) (0) | 2025.10.18 |
|---|---|
| 백준 1269번- '대칭 차집합' (PYTHON 풀이) (0) | 2025.10.17 |
| 백준 1764번- '듣보잡' (PYTHON 풀이, 문제 해석 O) (0) | 2025.10.15 |
| 백준 1620번- '나는야 포켓몬 마스터 이다솜' (PYTHON 풀이) (0) | 2025.10.14 |
| 백준 14425번- '문자열 집합' (PYTHON 풀이) (0) | 2025.10.13 |
