No Rules Rules

탑 (feat. 백준, 2493번) 본문

생활/코테

탑 (feat. 백준, 2493번)

개발하는 완두콩 2022. 10. 4. 18:42
728x90
반응형


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

 

2493번: 탑

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

www.acmicpc.net

 

반응형

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    register int N, i;
    stack<pair<int, int>> ans;
    cin >> N;
    for(register int n = 0, v; n < N; ++n){
        cin >> v;
        while(!ans.empty()){
            if(v <= ans.top().second){
                cout << ans.top().first << " ";
                break;
            }
            ans.pop();
        }
        if(ans.empty())
            cout << 0 << " ";
        ans.push(make_pair(n + 1, v));
    }
    return 0;
}
// *&)*@*

 

  1. 시간 초과로 인해 꽤나 시간이 걸렸습니다.
  2. stack의 마지막 높이보다 더 높은 값을 입력받은 경우, stack의 마지막 값은 입력받은 값으로 swap될 수 있습니다. 단, 값이 변경되는 것일뿐 인덱스는 증가되어야 합니다. (그래서 pair를 사용하였습니다.)
  3. 반대로 stack의 마지막 높이보다 더 낮은 값을 입력받은 경우, stack에 입력받은 값을 쌓을 수 있어야 합니다.
728x90
반응형
Comments