백준 10816 파이썬

임규성·2022년 6월 4일
0
post-custom-banner


이 문제를 숫자 카드1처럼 순차탐색으로는 타임에러가 발생할 것이 분명해서 이진탐색으로 이문제를 접근했지만 이또한 타임에러로 또 실패했다.
하지만 이분탐색에서 벗어나 생각해보니 그냥 딕셔너리에 첫번째 리스트의 요소의 개수를 저장해주고 두번째 리스트요소들이 그 딕셔너리에 있는지 비교하면서 출력만해준다면 시간 복잡도는 O(n)밖에 안되기 때문에 시도해봤다.

소스코드

#입력
#첫째줄 입력받고자하는 리스트의 크기 N
#둘째줄 리스트값들을 공백으로 구분하여 입력
#셋째줄 찾고자하는 값들의 개수 M
#넷째줄 찾고자하는 값들의 공백으로 구분하여 입력
import sys

N = int(input())
input_list = list(map(int, sys.stdin.readline().split()))

M = int(input())
search_list = list(map(int, sys.stdin.readline().split()))

#input_list의 요소들의 개수 딕셔너리에 저장해주기
my_dict = dict()

input_list.sort()

for i in input_list:
  if i in my_dict:
    my_dict[i] += 1
  else:
    my_dict[i] = 1

for i in search_list:
  if i in my_dict:
    print(my_dict[i] ,end = ' ')
  else:
    print(0, end = ' ')
    
    
  

너무 이분탐색만을 생각하며 했더니 시간이 오래결렸다.

profile
삶의 질을 높여주는 개발자
post-custom-banner

0개의 댓글