첫번째 코드
물론 코드는 책을 참고했지만, 이전에 풀어본 세그먼트 코드에서
해당 코드 부분마다 이해를 했기 때문에, 어느 코드를 빼야 하는지, 바꿔야 하는지에 대한 이해는 쉬웠다.
여러번 풀어보면 금방 풀 수 있을 것 같다.
하지만 코드를 혼자 작성하는 데에는 단계단계 생각하면서 작성해야 할 것이다.
또한 개념에서 암기를 해야 편한 부분이 있기 때문에 해당 부분도 이해해야 할 것이다.
나아가 함수가 많아지기 때문에 각 함수가 어디에 필요한지, 어떤 함수가 필요한지 익숙해져야 할 것이다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
treeHeight = 0
length = n
while length != 0:
length //= 2
treeHeight += 1
treeSize = 2 ** (treeHeight + 1)
leftNodeStartIndex = treeSize//2 - 1
tree = [sys.maxsize] * (treeSize + 1)
for i in range(leftNodeStartIndex + 1, leftNodeStartIndex + n + 1):
tree[i] = int(input())
def setTree(i):
while i != 1:
if tree[i // 2] > tree[i]:
tree[i // 2] = tree[i]
i -= 1
setTree(treeSize - 1)
def getMin(s, e):
Min = sys.maxsize
while s <= e:
if s % 2 == 1:
Min = min(Min, tree[s])
s += 1
if e % 2 == 0:
Min = min(Min, tree[e])
e -= 1
s = s // 2
e = e // 2
return Min
for _ in range(m):
s, e = map(int, input().split())
s = s + leftNodeStartIndex
e = e + leftNodeStartIndex
print(getMin(s, e))
통과
괜찮아! 다음에 또 풀어보자 :) 어려운 문제잖앙
링크
programmers/백준/Gold/10868. 최솟값 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
074 LCA (미해결) (0) | 2024.08.06 |
---|---|
073 구간 곱 구하기 (0) | 2024.08.06 |
071 구간 합 구하기 (0) | 2024.08.01 |
070 트리 순회 (0) | 2024.07.30 |
069 문자열 집합 (미해결) (0) | 2024.07.30 |