티스토리 뷰
728x90
반응형
https://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
내 풀이
import sys
n=int(sys.stdin.readline())
arr_n = list(map(int,sys.stdin.readline().split()))
m=int(sys.stdin.readline())
arr_m = list(map(int,sys.stdin.readline().split()))
arr_n.sort()
for i in range(m):
left = 0
right = len(arr_n)-1
while left<=right:
mid = (left+right)//2
if arr_m[i] == arr_n[mid]:
print(1)
break
elif arr_m[i]<arr_n[mid]:
right = mid-1
else:
left = mid+1
if left>right:
print(0)
이진 탐색을 해서 푸는 문제였는데 이진 탐색이 너무 오랜만이라 까먹고 있었다 ㅎ
그래서 검색했음 ㅋ ㅋ
이진탐색은 중앙값과 비교하여 중앙값보다 작으면 왼쪽을, 중앙값보다 크면 오른쪽을 택하여 탐색을 계속해 나가는 방식을 사용한다.
left와 right를 사용하고, 중앙값보다 작으면 right를 mid-1로, 중앙값보다 크다면 left를 mid+1로 설정하여 다시 mid를 계산한다.
만약 left값이 right보다 크게 되면 찾는 값이 없다는 의미이므로 0을 출력한다.
이진 탐색의 시간복잡도는 O(longN)으로, 확인하는 데이터 갯수가 절반씩 줄어드는 특징이 퀵 정렬과 동일하다.
탐색해야 하는 데이터의 갯수나 값이 1000만 이상일 경우 O(logN) 수준의 알고리즘을 활용하는 것이 좋다.
다른 사람 풀이
ip = input
def main():
ip()
n = ip().strip().split(' ')
ip()
s = set(n)
r = ''
for k in input().strip().split(' '):
r += '1\n' if k in s else '0\n'
print(r)
if __name__ == "__main__":
main()
이진 탐색 문제이지만 set를 사용해 푼 코드가 시간이 더 적게 걸리나보다.
재귀를 이용한 구현도 가능하다.
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
[CodingTest] 백준 python #1012 유기농 배추 (0) | 2022.01.14 |
---|---|
[CodingTest] 백준 #10871 X보다 작은 수 (0) | 2021.12.23 |
[CodingTest] 백준 #11286 절댓값 힙 (0) | 2021.12.20 |
[CodingTest] 백준 #1927 최소 힙 (0) | 2021.12.20 |
[CodingTest] 백준 #11279 최대 힙 / 힙큐 heapq (0) | 2021.12.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- web
- javascript
- 장고
- jQuery
- 프로그래머스
- append
- brute force
- Django
- CSS
- python
- 자바스크립트
- 파이썬
- html
- 브루트 포스
- 고득점 키트
- baekjoon
- R
- Case When
- 스프링
- bootstrap
- 단계별로풀어보기
- 덱
- 문자열
- 큐
- 정렬
- Java
- Oracle
- 백준
- jsp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함