Data Science

[파이썬] 백준 10816: from collections import Counter 본문

알고리즘

[파이썬] 백준 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=' ')

 

 

 

또 다른 방법으로는 이분탐색이 있다.

이분탐색을 다시 공부해야 할 것 같다.

 
Comments