알고리즘/BOJ

[c/c++] BOJ 6198번 문제 - 옥상 정원 꾸미기

wonjun.Aden 2022. 2. 25. 19:12

https://www.acmicpc.net/problem/6198

 

6198번: 옥상 정원 꾸미기

문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으

www.acmicpc.net

문제

문제풀이

#include <bits/stdc++.h>
using namespace std;

//옥상 정원 꾸미기
//2493 탑의 반대문제이라고 생각됨.
//O(n)
//스택의 사이즈를 더하는건 지금 있는 건물들에서 벤치마킹 할 수 있는 경우의 수가 되게 함.
//이를 반대로 생각해보면, 1번은 아무도 볼 수 없고, 2번은 1번에서만 볼 수 있다. 또한 3번은 1번에서만 볼 수 있고, 4번은 1, 3번에서만 볼 수 있다.
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    stack<long long> st;
    long long ans=0;
    for(int i=0;i<n;i++){
        long long num;
        cin >> num;
        while(!st.empty()){
            if(st.top() <= num){
                st.pop();
            }else{
                break;
            }
        }
        st.push(num);
        ans+=st.size()-1;
    } 
    cout << ans;
    return 0;
}

문제의 포인트

  • 2493번 문제와 매우 유사
  • 스택의 사이즈를 더하는 이유는 지금 있는 건물들에서 벤치마킹할 수 있는 경우의 수가 되게 함.
  • 반대로 생각해보기.
반응형