A-030● Day 302026.06.05mediumleetcode #875neetcode150
코코의 바나나 먹기
#array#binary-search
01
문제
· problem코코는 바나나를 먹는 것을 좋아합니다. n개의 바나나 더미가 있으며, i번째 더미에는 piles[i]개의 바나나가 있습니다. 경비원들이 가서 h시간 후에 돌아올 예정입니다. 코코는 시간당 바나나 먹는 속도 k를 정할 수 있습니다. 매 시간마다, 그녀는 어떤 바나나 더미를 선택하고 그 더미에서 k개의 바나나를 먹습니다. 만약 더미에 k개보다 적은 바나나가 있다면, 모두 먹고 그 시간 동안 더 이상의 바나나를 먹지 않습니다. 코코는 천천히 먹고 싶지만, 경비원이 돌아오기 전에 모든 바나나를 먹어야 합니다. 코코가 h시간 내에 모든 바나나를 먹을 수 있는 최소 정수 k를 반환하세요.
제약
- · 1 ≤ piles.length ≤ 10⁴
- · piles.length ≤ h ≤ 10⁹
- · 1 ≤ piles[i] ≤ 10⁹
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
02
사전 사고
· pre-solve● 1리스트 출력→● 2선택→● 3정답 공개
- ☐코코는 한 시간에 여러 더미에서 먹을 수 있나요?
- ☐코코의 먹는 속도 k는 시간에 따라 변할 수 있나요?
- ☐k는 정수여야 하나요?
- ☐어떤 더미에서 시작하든 모두 시간이 같나요?
- ☐k가 max(piles)보다 작으면 반드시 모든 바나나를 먹을 수 없나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03
논리 구조
· logic● 1슬롯 출력→● 2슬롯별 선택→● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 이진 탐색 범위 초기화
○
l, r = 1, max(piles)
○
l, r = 0, sum(piles)
○
l, r = 1, len(piles)
step 2· 최대 속도로 초기 결과 설정
○
res = r
○
res = l
○
res = -1
step 3· 탐색 범위가 존재하는 동안 반복
○
while l <= r:
○
while l < r:
○
while l <= r - 1:
step 4· 중간 후보 속도 계산│ 중첩
○
k = (l + r) // 2
○
k = (l + r) / 2
○
k = r - (r - l) // 2
step 5· 속도 k로 필요한 총 시간 계산│ │ 중첩
○
totalTime += math.ceil(float(p) / k)
○
totalTime += p // k
○
totalTime += p / k
step 6· 속도가 실행 가능할 때 우측 범위 업데이트│ │ 중첩
○
r = k - 1
○
l = k + 1
○
r = k
step 7· 속도가 불충분할 때 좌측 범위 업데이트│ │ 중첩
○
l = k + 1
○
r = k - 1
○
l = k
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04
문제풀이 · 트레이스
· solve머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[3,6,7,11] 8→
4
case 2
[30,11,23,4,20] 5→
30
case 3
[30,11,23,4,20] 6→
23
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.