[C++] 백준 2493 : 탑

Kim Nahyeong·2022년 1월 19일
0

백준

목록 보기
66/157

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int N;
vector<int> v;
stack<pair<int, int> >s;

int main(int argc, char **argv){
    scanf("%d", &N);

    int x;
    for(int i=0; i<N; i++){
        scanf("%d", &x);
        v.push_back(x);
    }

    for(int i=0; i<N; i++){ // O(N)
        while(!s.empty() && v[i] > s.top().first){
            s.pop();
        }
        if(!s.empty()){
            printf("%d ", s.top().second);
        } else {
            printf("0 ");
        }
       
        s.push(make_pair(v[i], i+1)); // pair 만들어줌
    }

    return 0;
}

뭐지 왜 쉬운데 골드 5 문제지?
왼쪽에 있는 나보다 높은 탑의 번호를 출력하면 되는 문제.

그냥 하나씩 스택에 넣어주면서 나보다 높이가 낮으면 pop하고 아니면 그 탑의 index 번호를 출력하면 되는 문제이다.

  • make_pair 함수로 pair를 만들 수 있다.

그리고 드디어 골드에 도달했다! 하지만 골드 문제는 고작 5문제 풀었고 내 힘으로 푼 건 고작 3문제밖에 안된다... 물골드 그 자체 인간.
그래도 이제 골드 5 문제를 슬슬 풀 수 있는 걸 보면서 그만큼 실력이 향상된 걸꺼라고 믿어보며. 아자아자 화이팅

0개의 댓글