알고리즘 풀이/백준

[백준 1920] 수 찾기

mhko411 2021. 3. 18. 16:06
728x90

www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net


접근

처음에는 단순하게 리스트에 N개의 수를 넣고 또 다른 리스트에 M개의 수를 넣어 for문으로 탐색하면서 in연산을 사용하였다. 하지만 리스트를 탐색하는 것은 O(N)의 시간복잡도가 발생하여 시간초과가 발생하였다.

 

이를 set이나 dict 자료형을 사용하면 O(1)의 시간복잡도를 갖기 때문에 효율적이라는 것을 알게되었다. 

 

구현

N개의 수를 set 자료형으로 입력받으며 numbers에 있는 M개의 수를 in으로 비교한다.

이때 O(1)의 시간복잡도가 발생하여 리스트로 탐색하는 것보다 효율적이다.

import sys
input = sys.stdin.readline

N = int(input())
numbers_set = set(map(int, input().split()))

M = int(input())
numbers = list(map(int, input().split()))

for i in range(M):
    if numbers[i] in numbers_set:
        print(1)
    else:
        print(0)

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[백준 11866] 요세푸스 문제0  (0) 2021.03.18
[백준 10816] 숫자 카드2  (0) 2021.03.18
[백준 17142] 연구소 3  (0) 2021.03.15
[백준 2206] 벽 부수고 이동하기  (0) 2021.03.15
[백준 14889] 스타트와 링크 cpp  (0) 2021.03.10