본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 1166번 선물

by 현장 2022. 1. 3.

-코드

n, l, w, h = map(int, input().split())
start, end = 0, min(l, w, h)
for _ in range(100):
    mid = (start + end) / 2
    a = (l // mid) * (w // mid) * (h // mid)
    if a < n:
        end = mid
    else:
        start = mid
print('%.10f' % start)

처음에는 루트를 통해서 풀려고 했지만 입출력이 다르게 나오는 것이 있어서 보니 이분 탐색 문제였습니다. 그래서 이분 탐색을 하는데 end를 무엇으로 잡는지와 무엇으로 크기를 구하는지를 완전히 이해를 하지 못해서 게시판 등을 찾아보고 썼으나 mid + 1과 mid - 1로 값을 변경해주는 부분에서 계산이 이상해지고 while을 사용하니 값이 또 이상해져서 찾아보니 for문으로 해결이 가능했고 소수점 문제도 생겨서 따로 설정하여 해결을 하였습니다.