-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold V] Title: 옥상 정원 꾸미기, Time: 12 ms, Memory: 2680 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |