백준 10816번 바로가기

첫 번째 시도

n = int(input())
list = [int(i) for i in input().split()]
m = int(input())
for i in input().split():
  print(list.count(int(i)), end=" ")

역시나 그대로 코드를 짰더니 시간초과 error… list내의 모든 요소를 매번 읽어내다보니 시간이 오래 걸림. list대신 dictionary 사용해보자.

두 번째 시도

_ = int(input())

dict = {}
for i in list(map(int,input().split())):
  if i in dict:
    dict[i] += 1  
  else:
    dict[i] = 1
    
_ = int(input())

for i in input().split():
  if int(i) in dict:
    print(dict[int(i)], end=" ")  
  else:
    print(0, end=" ")

고수의 풀이

from collections import*
_,a,_,b=open(0)
c=Counter(a.split())
for v in b.split():print(c[v])

출처

CODE REVIEW

  1. list을 매번 읽는 것은 느리다.
    • list를 사용하려면 탐색 방법을 개선해야하고
    • dictionary와 같은 다른 방법을 살펴보아야 한다.
  2. 고수의 풀이에서는 collections 라이브러리 안의 Counter() 함수를 사용하였다.
    • 리스트를 먹이면 알아서 갯수 딕셔너리를 뱉어주는 아주 유용한 함수다.
    • python builtin 함수가 뭐뭐 있는지 아는 것도 실력인듯…?!