업데이트:

카테고리: ,

1. 문제

문제는 링크에 들어가면 있다.

2. 정답 코드

문제의 내 정답 코드는 다음과 같다.

import sys
read = sys.stdin.readline

N = int(read())
N_list = list(map(int,read().split()))
M = int(read())
M_list = list(map(int,read().split()))

plut_list = [0]*10000001
minus_list = [0]*10000001
for n in N_list :
    if n >= 0 :
        plut_list[n] += 1
    else :
        minus_list[-1*n] += 1

for m in M_list :
    if m >= 0 :
        print(plut_list[m],end=' ')
    else :
        print(minus_list[-1*m],end=' ')




3. 문제 풀이

이 문제는 계수정렬같은 느낌을 사용하면 쉽게 풀리는 문제인데.. 내가 너무 어렵게 생각한 것 같다.. 이진 탐색으로 풀려고 노력하면서 1시간을 날렸는데.. 생각을 바꿔서 위 코드를 생각해내니 5분도 걸리지 않음.. 너무 어렵게 풀려고 하지 말자ㅜ

주어지는 N의 개수와 M의 개수가 50만개밖에 되지 않으므로 for문을 2개를 따로 돌려도 최대 100만번의 반복문밖에 실행되지 않기 때문에 위 처럼 코드를 구성하게 되었다. 하나씩 살펴보면서 해당 값의 list를 카운트하면 M list에서 나올 숫자를 index로 활용하여 간단히 답을 구할 수 있다.

최대 1 분 소요