[Python] 백준 문제풀이 - 16401번

이형래·2022년 7월 26일
0

백준문제풀이

목록 보기
33/36

백준 문제풀이 - 16401 번


링크 -> https://www.acmicpc.net/problem/16401


1. 요약 및 풀이방법

놀러온 조카들이 싸우지 않으면서 최대한 오래 떼를 쓰지 않도록 막대과자 길이를 최대로 하여 나눠주는 방법을 찾는 문제입니다.

나눠줄 수 있는 막대과자의 최소길이, 최대길이를 범위로 하여
이분탐색을 진행하는 간단한 문제입니다.


2. Code

def main():
    M, N = map(int, input().split())
    sticks = list(map(int, input().split()))

    start = 1
    end = max(sticks)
    while start <= end:
        mid = (start + end) // 2
        count = 0
        for stick in sticks:
            count += (stick // mid)
        if count < M:
            end = mid - 1
        else:
            start = mid + 1
    print(end)

if __name__ == "__main__":
    main()

3. 학습 내용

start0으로 초기화 한 문제로 ZeroDivisionError가 발생하였습니다.
문제에 나와있는대로 같은 길이의 과자를 나눠줄 수 있는 경우가 없다면 0을 출력해야하는 조건때문에
위와같이 start = 0 으로 초기화 하는 실수를 하였습니다.
막대과자 길이를 1로 해도 모든 조카들에게 나눠줄 수 없다면 결과적으로 end = 1 - 1 = 0 이 됩니다.
다시 한번 초기화의 중요성을 느낄 수 있었습니다.


4. 결과

profile
머신러닝을 공부하고 있습니다. 특히 비전 분야에 관심이 많습니다.

0개의 댓글