Python_알고리즘/Silver IV
2776. [Python]암기왕
최근영
2025. 1. 14. 04:09
1. 문제
https://www.acmicpc.net/problem/2776
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 256MB
- 딕셔너리
3. 파이썬 코드
import sys
# 많은 인풋처리
T = int(sys.stdin.readline())
# 테스트 케이스 반복문
for i in range(1,T+1):
# 딕셔너리 선언
num_dict = {}
N = int(sys.stdin.readline())
nums = list(map(int,sys.stdin.readline().split()))
M = int(sys.stdin.readline())
nums_check = list(map(int,sys.stdin.readline().split()))
# 딕셔너리에 값 저장
for j in nums:
if j not in num_dict:
num_dict[j] = 0
# 숫자가 딕셔너리에 있으면 1 출력 없으면 0 출력
for k in nums_check:
if k in num_dict:
print('1')
else:
print('0')
4. 문제를 풀고난 후 생각
- 첫 문제 접근을 이분 탐색으로 진행했지만 시간초과가 발생하여 고민한 문제이다. 1,000,000 의 N, M 이기 때문에 결국 리스트를 정렬 후 탐색을 함에 있어서 시간초과가 발생한 것 같다.
- 다른 자료구조인 딕셔너리의 탐색을 통해서 (O(1)) 시간 복잡도를 단순하게 만들었기 때문에 별도의 sort 처리가 필요없고 시간복잡도를 줄이는 방식을 사용하여 체크를 진행했다.
- 시간복잡도에 대해서 고민을 할 수 있던 문제였다.
5. 문제를 푸는데 도움이 되는 지식
- 딕셔너리