-
백준 10815 - 숫자 카드BOJ-Algorithm 2022. 1. 16. 11:57
https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
import sys input = sys.stdin.readline n = int(input()) set_a = set(map(int, input().split())) m = int(input()) list_a = list(map(int, input().split())) ans = [] for num in list_a: if num in set_a: ans.append(1) else: ans.append(0) print(*ans)
비교해야 할 리스트의 길이가 최대 500000이기 때문에, 탐색에 O(n)이 걸리는 리스트로는 두 리스트를 모두 순차적으로 탐색하려면 500000의 제곱에 달하는 시간이 소요된다. 따라서 해당 방법은 시간초과에 걸릴 가능성이 높다.
그러므로, 탐색에 O(1)이 걸리는 해시테이블 계열의 자료구조를 쓰는 것이 좋다. 그래서 처음 입력받는 배열을 set 형태로 생성해서 값을 저장한다.
이후 두 번째 배열은 리스트로 받고, 해당 값이 set에 있는지만 체크해서 있으면 1, 없으면 0을 배열에 담은 뒤 배열의 값을 출력한다.
'BOJ-Algorithm' 카테고리의 다른 글
백준 9461 - 파도반 수열 (0) 2022.01.17 백준 1927 - 최소 힙 (0) 2022.01.17 백준 10819 - 차이를 최대로 (0) 2022.01.15 백준 1003 - 피보나치 함수 (0) 2022.01.14 백준 1158, 백준 11866 - 요세푸스 문제 (0) 2022.01.14