Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- c3 second
- c3 초
- snmp
- python os
- python subprocess
- gcc regex
- linux시간으로 변경
- 정규식 활용
- c3 step graph
- c3 축 없애기
- telegraf
- centos pyhon 설치
- 정규식 컴파일
- c++ 정규식
- c3 축 가리기
- python popen
- 1697
- influxdb 설치
- 백준
- InfluxDB
- 정규식 문자열 출력
- subporcess path
- CentOS7
- regex_search
- snmp test
- selinux port 등록
- grafana dashboard
- gcc 업데이트
- semanage
- g++ 업데이트
Archives
- Today
- Total
리셋 되지 말자
[백준 1920] 수 찾기 - 해시, 이분탐색, Counter, Set 본문
코드1 - Counter
from collections import Counter
n = int(input())
arr1 = map(int, input().split())
arr1 = Counter(arr1)
m = int(input())
arr2 = map(int, input().split())
for num in arr2:
if num in arr1:
print('1')
else:
print('0')
첫 배열을 Counter 를 이용해 dict 자료구조로 바꾼 뒤, in으로 탐색한다. O(1) 이므로 통과
코드2 - set
n = int(input())
arr1 = map(int, input().split())
arr1 = set(arr1)
m = int(input())
arr2 = map(int, input().split())
for num in arr2:
if num in arr1:
print('1')
else:
print('0')
set 도 검색 시 O(1) 이기 때문에 value가 필요없는 dict 대신 사용가능
코드3 - 이분탐색
n = int(input())
arr1 = list(map(int, input().split()))
arr1.sort()
m = int(input())
arr2 = map(int, input().split())
for num in arr2:
start = 0
end = len(arr1) - 1
flag = False
while start <= end:
mid = (start + end) // 2
if arr1[mid] == num:
flag = True
break
elif arr1[mid] > num:
end = mid - 1
elif arr1[mid] < num:
start = mid + 1
if flag:
print('1')
else:
print('0')
arr2에 들어있는 수를 이분 탐색을 이용해 검색한다.
결과
위에서부터 코드3 (이분탐색), 코드2 (set), 코드1 (Counter) 인데 O(1) 과 O(log N) 차이가 난다.
'알고리즘' 카테고리의 다른 글
[백준 2798] 블랙잭 - combinations (0) | 2021.12.22 |
---|---|
[백준 2231] 분해합 - 브루트포스 (0) | 2021.12.22 |
[백준 1654] 랜선 자르기 - 이분탐색 (0) | 2021.12.22 |
[백준] 11724 (0) | 2020.08.27 |
pair 구성요소를 같은 vector 정렬하기 (0) | 2020.08.14 |
Comments