문제 출처
1. 문제설명
- 도시에는
N
개의 빌딩이 있다.
- 빌딩의 키는 h이다.
- 관리자가
i
번째 빌딩에 있는 경우
-자신보다 더 높거나 같은 빌딩이 있으면 그 다음 빌딩의 옥상은 보지 못한다.
- 관리인들이 확인할 수 있는 빌딩의 총 수를 구하라.
2. 알고리즘 설계
- 스택 문제이다.
- 각 빌딩의 높이를 입력받을 때마다 값을 구한다.
3. 로직
- 가장 최근 빌딩의 높이가
- 현재 입력된 빌딩의 높이보다
- 작거나 같으면 스택에서 빼준다.
- 이후 현재 스택 크기를 정답에 계속해서 더해주면 된다.
4. 전체 코드
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
stack<ll> st;
ll ans = 0, tmp;
int n;
cin >> n;
while (n--) {
ll tmp;
cin >> tmp;
while (!st.empty() && st.top() <= tmp)
st.pop();
ans += st.size();
st.push(tmp);
}
cout << ans;
return 0;
}