[백준/C++] 2493번 탑

2021. 3. 20. 22:55알고리즘/구현

728x90
반응형

문제: www.acmicpc.net/problem/2493

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

 

문제풀이

 

스택을 사용하여 i번째 탑의 높이보다 크고 다른 탑에 의해 가려지지 않은 탑들만 스택에 남겨야한다. (i번째 탑에 서서 왼쪽의 탑들을 보았을 때 보이는 탑들)

 

 

코드

#include <iostream>
#include <stack>

using namespace std;

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

    int N;
    cin>>N;

    pair<int, int> tower[N];
    for(int i=0; i<N; i++){
        int height;
        cin>>height;
        tower[i] = {i+1, height};
    }

    stack<pair<int,int>> s;
    for(int i=0; i<N; i++){
        while(!s.empty() && s.top().second < tower[i].second){
            s.pop();
        }

        if(s.empty()){
            cout<<0<<" ";
        }
        else{
            cout<<s.top().first<<" ";
        }

        s.push(tower[i]);
    }

    return 0;
}

 

 

결과

728x90
반응형

'알고리즘 > 구현' 카테고리의 다른 글

[백준/C++] 18258번 큐 2  (0) 2021.03.21
[백준/C++] 1021번 회전하는 큐  (0) 2021.03.21
[백준/C++] 5397번 키로거  (0) 2021.03.19
[백준/C++] 1927번 최소 힙  (0) 2021.03.11
[백준/C++] 18870번 좌표 압축  (0) 2021.02.26