BE THE DEVELOPER

99클럽 코테 스터디 6일차 TIL: 이분 탐색 파이썬화 본문

일기장/항해99클럽 4기

99클럽 코테 스터디 6일차 TIL: 이분 탐색 파이썬화

미역굳 2024. 11. 2. 17:25

오늘의 문제: 2805. 나무 자르기

오늘 문제는 예전에 풀었던 문제이다. 예전에 C++로 풀었던 문제이기에 이번에는 파이썬으로 다시 풀어보려고 한다. 기본적인 이분탐색 문제이기에 크게 어려울 것은 없어보이지만, 숫자가 매우 크다는 점만 고려하면 될듯하다.

예전에 풀었던 문제라 이번에도 문제없이 금방 풀릴 줄 알았는데, 계속해서 틀리는 부분이 존재한다.

n,m=map(int,input().split())
l=[*map(int,input().split())]

left=1
right=max(l)
mid=0

while left<=right:
    mid=(left+right)//2
    tree=0
    for i in l: tree+=max(0,i-mid)
    if tree>=m:
        left=mid+1
    else:
        right=mid-1

print(right)

오늘도 출력을 어떤 걸 해야하나에서 문제가 발생한 듯하다. 이제 대부분의 코드는 짤 수 있지만 어떤 걸 선택해야 하는지에 대한 명분을 구하는 연습을 해야겠다고 느껴진다.

오늘의 회고

오늘도 검색으로 마무리했다. 사실 이분탐색의 대부분의 코드는 누구나 거의다 짤수 있다. 하지만 디테일적인 부분에서 실력 차이가 나는 것으로 보이는데, 이건 단순히 감으로 구해야 하는 것인지 아니면 확실한 논리가 있는 것인지 헷갈린다.