본문 바로가기
코딩 테스트/do it! 알고리즘 코딩테스트

072 최솟값

by ornni 2024. 8. 1.
728x90
반응형

첫번째 코드

 

물론 코드는 책을 참고했지만, 이전에  풀어본 세그먼트 코드에서

해당 코드 부분마다 이해를 했기 때문에, 어느 코드를 빼야 하는지, 바꿔야 하는지에 대한 이해는 쉬웠다.

 

여러번 풀어보면 금방 풀 수 있을 것 같다.

하지만 코드를 혼자 작성하는 데에는 단계단계 생각하면서 작성해야 할 것이다.

또한 개념에서 암기를 해야 편한 부분이 있기 때문에 해당 부분도 이해해야 할 것이다.

 

나아가 함수가 많아지기 때문에 각 함수가 어디에 필요한지, 어떤 함수가 필요한지 익숙해져야 할 것이다.

 

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))

 

통과

괜찮아! 다음에 또 풀어보자 :) 어려운 문제잖앙


링크

https://github.com/ornni/programmers/tree/main/%EB%B0%B1%EC%A4%80/Gold/10868.%E2%80%85%EC%B5%9C%EC%86%9F%EA%B0%92

 

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