전체 회차
A-013Day 132026.05.15mediumleetcode #11neetcode150

물이 가장 많은 용기

#array#two-pointers#greedy
leetcode #11 · container-with-most-water
01

문제

· problem
P.013

물이 가장 많은 용기

leetcode #11

길이가 n인 정수 배열 height가 주어집니다. n개의 수직선이 있고, i번째 선의 끝점은 (i, 0)과 (i, height[i])입니다. 두 선이 x축과 함께 만드는 용기가 가장 많은 물을 담을 수 있도록 두 선을 찾으세요. 용기가 담을 수 있는 물의 최대량을 반환하세요. 용기를 기울일 수 없다는 점에 유의하세요.

제약
  • · n == height.length
  • · 2 ≤ n ≤ 10^5
  • · 0 ≤ height[i] ≤ 10^4
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
example 1input → output
[1,8,6,2,5,4,8,3,7]
49
example 2input → output
[1,1]
1
02

사전 사고

· pre-solve
● 1리스트 출력● 2선택● 3정답 공개
  • 두 선 사이의 물의 넓이는 어떻게 계산되나요?
  • 다른 인덱스의 임의의 두 선을 사용할 수 있나요?
  • 더 작은 높이를 가진 포인터를 왜 움직여야 하나요?
  • 인접한 두 선의 높이가 같으면 어떻게 하나요?
  • 모든 가능한 선의 쌍을 확인해야 하나요?
  • 용기를 수평이 아닌 수직으로 배치할 수 있나요?
  • 원본 높이 배열을 수정해야 하나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03

논리 구조

· logic
● 1슬롯 출력● 2슬롯별 선택● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 양쪽 끝에 포인터 초기화
l, r = 0, len(height) - 1
l, r = 0, len(height) // 2
l, r = 1, len(height) - 2
step 2· 최대 넓이 추적기 초기화
res = 0
res = float('-inf')
res = height[0] * (len(height) - 1)
step 3· 포인터가 교차할 때까지 반복
while l < r:
while l <= r:
while r - l > 1:
step 4· 넓이 계산 및 최댓값 추적중첩
res = max(res, min(height[l], height[r]) * (r - l))
res = max(res, height[l] * height[r] * (r - l))
res = max(res, (height[l] + height[r]) * (r - l))
step 5· 더 작은 높이의 포인터 이동중첩
if height[l] < height[r]:
if height[l] > height[r]:
if l < r // 2:
step 6· 왼쪽 포인터를 안쪽으로 이동│ │ 중첩
l += 1
l -= 1
l += 2
step 7· 오른쪽 포인터를 안쪽으로 이동 (해당하는 경우)│ │ 중첩
r -= 1
r += 1
r -= 2
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04

문제풀이 · 트레이스

· solve
solution.py
1
class Solution:
2
    def maxArea(self, height: List[int]) -> int:
3
        l, r = 0, len(height) - 1
4
        res = 0
5
6
        while l < r:
7
            res = max(res, min(height[l], height[r]) * (r - l))
8
            if height[l] < height[r]:
9
                l += 1
10
            elif height[r] <= height[l]:
11
                r -= 1
12
            
13
        return res
머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[1,8,6,2,5,4,8,3,7]
49
case 2
[1,1]
1
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.