Link
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 행별속성합계
- 빅데이터분석기사
- 2회기출
- 셋
- 공빅데
- 파이썬AHP
- 리스트
- 실기
- 파이썬딕셔너리
- 공공빅데이터청년인턴
- 워드클라우드
- 파이썬
- 백준1920
- 파이썬셋
- 파이썬튜플
- 튜플
- 딕셔너리
- 예측모델링
- 공빅데기관매칭
- 백준 2164
- 빅분기
- 작업형2
- 태블로
- 파이썬입출력
- set시간복잡도
- konlpy
- dataq
- csv병합
- 빅분기실기
- 컨테이너
- Today
- Total
Data Science
[파이썬] 백준 1920 : list와 set의 시간복잡도 본문
[파이썬] 백준 1920 : list와 set의 시간복잡도
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
예제 입력 1
5
4 1 5 2 3
5
1 3 7 9 5
예제 출력 1
1
1
0
0
1
간단한 문제라고 생각했다.
하지만 문제에서 [모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.] 라는 조건에 있음에 유의하여야 했다.
기존 답안 (오답 : 시간초과)
n = int(input())
A = list(map(int,input().split()))
m = int(input())
B = list(map(int,input().split()))
for num in B:
if num in A:
print(1)
else:
print(0)
이유
파이썬에서 탐색시 시간복잡도가
list 자료형은 O(n) 이고
set 자료형은 O(1) 이다.
set은 해시 테이블로 구현 되어있기 때문에
탐색시 해당 값을 해시 함수에 넣어 인덱스에 접근함으로써 빠르게 해당값이 있는지 여부를 확인 할 수 있다.
탐색할 리스트를 세트형태로 변환하여 해결이 가능했다.
n = int(input())
A = list(map(int,input().split()))
m = int(input())
B = list(map(int,input().split()))
A = set(A)
for num in B:
if num in A:
print(1)
else:
print(0)
+ 참고
'알고리즘' 카테고리의 다른 글
[파이썬] 백준 10816: from collections import Counter (0) | 2022.05.19 |
---|---|
[파이썬] 백준 2164 : 리스트는 큐로 이용하면 안된다. (0) | 2022.05.18 |
[SWEA] 2005번 파스칼의 삼각형 파이썬(Python) (0) | 2022.05.05 |
파이썬 백준 2908 (0) | 2021.10.06 |
파이썬 백준 4673 (0) | 2021.10.06 |
Comments