알고리즘/백준

백준 10816: 숫자 카드 2 (Python)

sssbin 2022. 2. 10. 22:57

 

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 

채점하는데만 1분 30초는 걸려서 나 처음에 시간 초과 뜨는 줄^^,,

 

import sys

n = int(input())
card = sorted(map(int, sys.stdin.readline().split()))
m = int(input())
find = list(map(int, sys.stdin.readline().split()))

dict_card = dict()
for i in card:
    if i in dict_card:
        dict_card[i] += 1
    else:
        dict_card[i] = 1

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

 

원래 이진탐색 -> 찾으면 앞뒤 인덱스 확인해가면서 같은 원소를 찾음

이렇게 하려고 했는데 복잡하고 비효율적임.. 내가 생각해도 이건 아니다 싶었다

 

딕셔너리를 이용해서 {값:개수} 형태로 저장하고 값을 찾으면 개수를 출력하게 했다

이진탐색을 이용하지 않아도 풀리는 문제다!