문제 링크
https://www.acmicpc.net/problem/10816
10815번 문제와 유사해서 계속 이진 탐색 주변만 맴돌았다. 제대로 풀지 못했다.
정답 코드
1. Counter 이용
Counter를 이용해서 풀 수 있다. Counter는 각 원소가 몇번 나오는지 딕셔너리 형태로 반환해준다.
‘from collections import Counter’를 맨 위에 해주어야 한다.
count = Counter(nums_card)를 하면 count는 {6:1,3:2,2:1,10:3,-10:2,7:1}이 될 것이다. nums_int를 하나씩 돌아보며 count에서 하나씩 출력하면 된다.
import sys
from collections import Counter
N = int(sys.stdin.readline())
nums_card = list(map(int,sys.stdin.readline().split()))
M = int(sys.stdin.readline())
nums_int = list(map(int,sys.stdin.readline().split()))
count = Counter(nums_card)
for i in range(M):
if nums_int[i] in count:
print(count[nums_int[i]],end=' ')
else:
print(0, end=' ')
2. 파이썬 딕셔너리 이용
Counter로 푼 방식과 유사하다. Counter가 해주는 역할을 딕셔너리를 이용하여 직접 작성해주는 것이다.
import sys
from collections import Counter
N = int(sys.stdin.readline())
nums_card = list(map(int,sys.stdin.readline().split()))
M = int(sys.stdin.readline())
nums_int = list(map(int,sys.stdin.readline().split()))
dic = {}
for i in nums_card:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
for i in nums_int:
if i in dic:
print(dic[i], end=' ')
else:
print(0, end=' ')
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 1992번 파이썬. 분할 정복. (0) | 2022.12.27 |
---|---|
Baekjoon Online Judge 2630번 파이썬. 분할정복 (0) | 2022.12.26 |
Baekjoon Online Judge 10815번 파이썬 (1) | 2022.09.22 |
Baekjoon Online Judge 2110번 파이썬 (1) | 2022.09.21 |
Baekjoon Online Judge 2805번 파이썬 (1) | 2022.09.19 |