LeetCode 84: 히스토그램에서 가장 큰 사각형 — 단계별 시각적 추적

발행: (2026년 4월 9일 오후 03:37 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

Problem

히스토그램을 나타내는 막대 높이 배열에서 만들 수 있는 가장 큰 직사각형의 넓이를 찾으세요. 각 막대의 너비는 1이며, 직사각형은 연속된 막대로 이루어져야 합니다.

Approach

단조 스택을 사용하여 높이가 증가하는 순서대로 막대의 인덱스를 추적합니다. 더 짧은 막대를 만나면, 이전에 저장된 더 높은 막대들을 높이로 사용하여 직사각형을 계산하고, 너비는 현재 위치와 스택 내용에 따라 결정합니다.

Complexity

  • 시간: (O(n))
  • 공간: (O(n))

Code

class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        stack = []
        max_area = 0

        for i in range(len(heights)):
            while stack and heights[i] < heights[stack[-1]]:
                height = heights[stack.pop()]
                width = i if not stack else i - stack[-1] - 1
                max_area = max(max_area, height * width)
            stack.append(i)

        while stack:
            height = heights[stack.pop()]
            width = len(heights) if not stack else len(heights) - stack[-1] - 1
            max_area = max(max_area, height * width)

        return max_area
0 조회
Back to Blog

관련 글

더 보기 »