Skip to content

Commit

Permalink
[Gold V] Title: 옥상 정원 꾸미기, Time: 12 ms, Memory: 2680 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
ffvv0123 committed Aug 24, 2024
1 parent b032255 commit 381ef54
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
65 changes: 65 additions & 0 deletions 백준/Gold/6198. 옥상 정원 꾸미기/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# [Gold V] 옥상 정원 꾸미기 - 6198

[문제 링크](https://www.acmicpc.net/problem/6198)

### 성능 요약

메모리: 2680 KB, 시간: 12 ms

### 분류

자료 구조, 스택

### 제출 일자

2024년 8월 25일 06:46:49

### 문제 설명

<p><img alt="sook-001(1).jpg" src=""></p>

<p>도시에는 N개의 빌딩이 있다.</p>

<p>빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다.</p>

<p>i번째 빌딩의 키가 h<sub>i</sub>이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다.</p>

<p>i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다.</p>

<p>그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다.</p>

<p>예) N=6, H = {10, 3, 7, 4, 12, 2}인 경우</p>

<pre> =
= =
= - =
= = = -> 관리인이 보는 방향
= - = = =
= = = = = =
10 3 7 4 12 2 -> 빌딩의 높이
[1][2][3][4][5][6] -> 빌딩의 번호</pre>

<ul>
<li>1번 관리인은 2, 3, 4번 빌딩의 옥상을 확인할 수 있다.</li>
<li>2번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.</li>
<li>3번 관리인은 4번 빌딩의 옥상을 확인할 수 있다.</li>
<li>4번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.</li>
<li>5번 관리인은 6번 빌딩의 옥상을 확인할 수 있다.</li>
<li>6번 관리인은 마지막이므로 다른 빌딩의 옥상을 확인할 수 없다.</li>
</ul>

<p>따라서, 관리인들이 옥상정원을 확인할 수 있는 총 수는 3 + 0 + 1 + 0 + 1 + 0 = 5이다.</p>

### 입력

<ul>
<li>첫 번째 줄에 빌딩의 개수 N이 입력된다.(1 ≤ N ≤ 80,000)</li>
<li>두 번째 줄 부터 N+1번째 줄까지 각 빌딩의 높이가 h<sub>i</sub> 입력된다. (1 ≤ h<sub>i</sub> ≤ 1,000,000,000)</li>
</ul>

### 출력

<ul>
<li>각 관리인들이 벤치마킹이 가능한 빌딩의 수의 합을 출력한다.</li>
</ul>

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <iostream>
#include <stack>
using namespace std;

int N;
long long h;
stack<pair<int, int>> s;

int main() {
ios::sync_with_stdio(false);
cin.tie(0);

long long answer = 0;
cin >> N;

//s.push({1000000001, 0});
for(int i=1; i <= N; i++) {
cin >> h;

while(!s.empty() && s.top().first <= h) s.pop();
answer += s.size();
s.push({h, i});
}

cout << answer;
return 0;
}

0 comments on commit 381ef54

Please sign in to comment.