728x90
6198번: 옥상 정원 꾸미기
문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으
www.acmicpc.net
🤔 문제분석
스택 자료구조를 활용하여 문제를 해결한다. 스택은 해당위치에서 자기자신보다 낮은 건물이 나올때까지 꺼낸다. 스택에 담긴 자료는 해당 건물포함해서 그 뒤에 볼 수 있는 건물을 담는다. 자기자신보다 큰 건물이기때문에 해당 건물을 포함한 그 뒤에있는 건물 또한 볼 수 있기때문이다.
💻 코드
import sys
input = sys.stdin.readline
N = int(input())
buildings = list(int(input()) for _ in range(N))
stack = []
ans = 0
for i in range(N-1, -1, -1):
cnt = 1
while stack and buildings[i] > stack[-1][0]:
_, c = stack.pop()
cnt += c
ans += c
stack.append((buildings[i], cnt))
print(ans)
🎯 피드백 및 개선사항
그리디, 다이나믹 프로그래밍 유형으로 접근하면 쉽게 생각해 낼 수 있는 문제라고 생각합니다. 경비원은 오른쪽만 볼 수 있다는것을 전제하에 접근하면 위와같은 점화식을 도출 할 수 있다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 16562번 : 친구비 (0) | 2024.02.24 |
---|---|
[백준] 1525번 : 퍼즐 (0) | 2024.02.24 |
[백준] 17299번 : 오등큰수 (0) | 2024.02.23 |
[백준] 2014번 : 소수의 곱 (0) | 2024.02.22 |
[백준] 2143번 : 두 배열의 합 (0) | 2024.02.20 |