본문 바로가기

알고리즘/백준

[백준] 6198번 : 옥상 정원 꾸미기

728x90

6198번: 옥상 정원 꾸미기

 

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