Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준 7579
- 프로그래머스 #정수삼각형 #동적계획법
- nodejs
- discord.js
- webpack
- 디스코드 봇
- content script
- 공부시간측정어플
- 갓생
- TypeScript
- react
- popup
- supabase
- 크롬 확장자
- 백준 #7568번 #파이썬 #동적계획법
- X
- 포도주시식
- 파이썬
- 캠스터디
- 크롬 익스텐션
- background script
- C언어로 쉽게 풀어쓴 자료구조
- 2156
- Message Passing
- 자료구조
- Chrome Extension
- 백준
- 동적계획법
Archives
- Today
- Total
히치키치
[백준] 6549번 : 히스토그램에서 가장 큰 직사각형- Python(파이썬) 본문
문제
https://www.acmicpc.net/problem/6549
풀이
- 스택 이용
- 현재 직사각형보다 큰 높이를 pop하여 넓이를 계산
- 나보다 작은 높이가 나올 때까지 넓이를 계산 / 갱신
- 최대 넓이에 대한 계산이 끝나면 현재 직사각형에 대한 넓이를 check 할 수 있도록 push
- N까지 다 돌고 스택에 남은 값에 대해서도 계산
코드
#문제 : https://www.acmicpc.net/status?user_id=omygod0313&problem_id=6549&from_mine=1
import sys
read=sys.stdin.readline
def maxSize():
max_size = 0 #최대 넓이 저장
stack = []
for now in range(N):
left = now #너비 시작점 설정
while stack and stack[-1][0] >= heights[now]:
#새로 추가될 직사각형보다 높이가 높은 경우
h, left = stack.pop()
#pop한 직사각형로 height,left(너비 끝점) 업데이트
tmp_size = h * (now-left) #높이 * (너비 시작점 - 너비 끝점) = 넓이
max_size = max(max_size, tmp_size) #최대 넓이 갱신
stack.append([heights[now],left]) # 스택이 비어있으므로 push
for h, point in stack: # 스택에 남은 직사각형 정보로 max_size 갱신
max_size = max(max_size, (N-point)*h)
return max_size
while True:
N, *heights = map(int,read().split())
if N == 0:
break
print(maxSize())
'알고리즘 스터디' 카테고리의 다른 글
[백준] 4179번 : 불! - Python(파이썬) (0) | 2022.06.03 |
---|---|
[백준] 7579번 : 토마토 - Python(파이썬) (0) | 2022.06.02 |
[백준] 2571번 : 색종이 - 3 - Python(파이썬) (0) | 2021.08.10 |
[백준] 4485번 : 녹색 옷 입은 애가 젤다지 - Python(파이썬) (0) | 2021.08.10 |
[백준] 1516번 : 개임 개발 - Python(파이썬) (0) | 2021.08.10 |
Comments