jyamethyst21 님의 블로그

백준 1920번- '수 찾기' (PYTHON 풀이) 본문

CODING 💻

백준 1920번- '수 찾기' (PYTHON 풀이)

jyamethyst21 2025. 11. 6. 13:24

문제:

 

배열 두개를 입력 받고 두번째로 입력받은 값들이 첫번째 배열에 존재하는지 순서대로 확인해서 출력해주면 된다. 일치하면 1, 아니면 0을 출력한다.

 

풀이:

import sys
input = sys.stdin.readline

N = int(input())
N_a = set(map(int,input().split()))
M = int(input())
M_a = list(map(int,input().split()))

for i in M_a:
    if i in N_a:
        print(1)
    else:
        print(0)

 

처음에 sys를 안쓰고, for문도 두번째 배열 값 길이만큼 돌면서 체크한 뒤 새로운 리스트에 0,1을 추가해서 그 결과를 print으로 출력하는 방식으로 했는데 시간초과가 나서 pypy3로 진행하였다. 그런데도 시간초과가 발생해서 방법을 좀 바꿔야겠다고 생각했고 그 결과가 위 코드와 같다.

우선 리스트 하나를 없앴고 굳이 결과를 리스트에 담을 필요없이 print만 해주면 되니까 for문으로 두번째 배열에 있는 값이 첫번째 배열에 있는지 확인해서 바로 결과를 print 해주는 것으로 진행하였다.

아 그리고 필자는 처음부터 첫번째 배열은 set으로 진행했는데 게시판 보니까 두 배열 모두 리스트로 하면 또 시간초과가 나는 것 같다. set이 list보다 더 빠르고, 두번째 배열은 순서때문에 집합을 쓰면 안되지만 첫번째 배열은 상관없으니 첫번째 배열 한정으로 set을 써줘도 무관하다. (두번째 배열은 set 쓰면 안됨!! 순서에 따라 0, 1을 출력해야하므로)