어디까지 갈 수 있을까?
chaper 7. 이진 탐색 본문
1. 순차탐색
데이터를 앞에서부터 차례로 확인하는 방법
시간복잡도가 log(N)
1
2
3
4
5
6
7
8
9
10
11
12
|
import sys
input=sys.stdin.readline
print('생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요')
a, find=input().split()
print('앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한 칸으로 합니다.')
arr=list(input().split())
for i in range(len(arr)):
if arr[i]==find:
print(i+1)
break
|
cs |
2. 이진탐색
데이터를 반으로 쪼개며 탐색하는 방법
이미 정렬 돼 있는 데이터 안에서만 가능하다
시간복잡도는 O(logN)
1
2
3
4
5
6
7
8
9
10
11
12
|
import sys
input=sys.stdin.readline
print('생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요')
a, find=input().split()
print('앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한 칸으로 합니다.')
arr=list(input().split())
for i in range(len(arr)):
if arr[i]==find:
print(i+1)
break
|
cs |
3. 트리 자료구조
이진 탐색은 먼저 데이터를 정렬하고 탐색을 시작해야 되지만
트리 자료구조는 데이터베이스 내부적으로 트리 자료구조를 이용해 항상 데이터가 정렬 돼있다.
이진탐색보다 탐색 속도가 빠르다
왼쪽 자식노드 < 부모노드 <오른쪽 자식노드 순이다.
만약 위의 트리에서 36을 찾으면
① 루트노드와 36을 비교했는데 루트노드가 36보다 작으므로 오른쪽 자식 노드를 방문한다
② 오른쪽 자식노드(45)가 36보다 크므로 45의 왼쪽 자식노드를 방문한다
③ 36 발견
이런식으로 동작한다
① 부품 찾기
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
|
import sys
input=sys.stdin.readline
n=int(input())
have=list(map(int, input().split()))
m=int(input())
find=list(map(int, input().split()))
have.sort()
for i in find:
check=0
start = 0
end = len(have)-1
while start<=end:
mid=(start+end)//2
if i==have[mid]:
print('yes', end=' ')
check=1
break
elif i<have[mid]:
end = mid - 1
else:
start = mid + 1
if check==0:
print('no', end=' ')
|
cs |
② 떡볶이 떡 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import sys
input=sys.stdin.readline
n, m = map(int, input().split())
arr=list(map(int, input().split()))
start=0
end=max(arr)-1
while start<=end:
result=0
mid=(start+end)//2
for i in arr:
if mid<i:
result+=i-mid
#떡 양이 부족한 경우 절단기 높이 줄이기
if result<m:
end=mid-1
else:
result=mid
start=mid+1
print(result)
|
cs |
구하고자 하는 절단기의 높이는 이진 탐색으로 구한다
출처 : 이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
728x90
'알고리즘 > 이것이취업을위한코딩테스트다' 카테고리의 다른 글
chapter 8. 다이나믹 프로그래밍 (0) | 2021.02.22 |
---|---|
이진탐색 문제 (0) | 2021.02.19 |
정렬 문제 (0) | 2021.02.17 |
chapter 6. 정렬 (0) | 2021.02.15 |
DFS/BFS 문제 (0) | 2021.02.15 |
Comments