새소식

반응형
Algotithms

[백준] 1166 선물

  • -
728x90
반응형

문제

  • AxAxA 크기의 N개 박스들을 LxWxH 직육면체 박스에 모두 넣으려고 할 때, A의 최댓값은?
    • 1 <= N, L, W, H <= 1,000,000,000
  • 작은 박스의 변은 큰 박스의 변과 평행해야 한다.

 

풀이

  • 이진 탐색
  • 넣을 수 있는 선물 박스의 개수는 $ (L \div A) \times (W \div A) \times (H \div A) $ 이다.
  • 따라서 A의 값을 이진탐색으로 범위를 좁혀 찾아나가기
  • 문제는 소숫점까지 계산해야한다는 것이라, 범위 조정을 m+1 이 아니라 m 으로 뒀다.
  • 그리고 최대 숫자가 1,000,000,000 이므로 100번만 반복해도 충분히 알아낼 수 있다.

 

N, L, W, H = map(int, input().split())

s, e = 0, 1_000_000_000
answer = 0
for i in range(100):
    m = (s+e) / 2

    if (L//m)*(W//m)*(H//m) >= N:
        answer = m
        s = m
    else:
        e = m

print(answer)

 

References

  • 백준 1166번
  • 2023.04.30 오늘의 문제
반응형

'Algotithms' 카테고리의 다른 글

[백준] 1449 수리공 항승  (0) 2023.05.02
[백준] 17836 공주님을 구해라!  (0) 2023.05.01
[백준] 17485 진우의 달 여행 (Large)  (1) 2023.04.29
[백준] 1072 게임  (0) 2023.04.29
[백준] 1005 ACM Craft  (0) 2023.04.29
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.