알고리즘
[파이썬] 백준 10816: from collections import Counter
shinho0902
2022. 5. 19. 23:04
오답 - 시간초과
N = int(input())
org_list = list(map(int,input().split()))
M = int(input())
new_list = list(map(int,input().split()))
for num in new_list:
cnt = org_list.count(num)
print(cnt,end=' ')
처음에 숫자 카드들의 갯수를 보고 단순히 풀면 시간초과가 나겠구나 예상했지만
간단하기 때문에 먼저 시도를 해봤다.
new_list 에서 숫자를 하나씩 불러와 org_list에 해당 숫자가 몇 개 있는지 판단하는 방식으로 만들었다.
예상과 같이 시간초과가 났다.
- 파이썬에는 해당 요소들이 몇개가 있는지 세어주는 함수가 존재
- from collections import Counter를 통해서 Counter 메서드를 가져옴
- 리스트 N을 Counter에 넣으면 N의 요소들의 숫자를 센 Dictionary자료형이 출력
- Counter(N)에 M의 요소가 있다면 해당 숫자를 출력하고 없으면 0을 출력
정답
N = int(input())
org_list = list(map(str,input().split()))
M = int(input())
new_list = list(map(str,input().split()))
from collections import Counter
Cnt = Counter(org_list)
# print(Cnt)
# # Counter({'10': 3, '3': 2, '-10': 2, '6': 1, '2': 1, '7': 1})
for num in new_list:
if num in Cnt:
print(Cnt[num],end=' ')
else:
print(0,end=' ')
또 다른 방법으로는 이분탐색이 있다.
이분탐색을 다시 공부해야 할 것 같다.