본문 바로가기
Algorithm/BOJ

탑 - 2493번

by y.j 2019. 5. 19.
728x90

해결방법

stack을 이용하여 해결 할 수 있다. stack에는 index를 넣는다.
if num[stack.top()] < input
-> input보다 큰 값이 stack이 나올때 까지 pop한다.
-> stack이 empty라면 0을 출력
-> 아니라면 stack.top()을 출력
-> stack에 index를 푸쉬한다.
else
-> st.top() 출력
-> stack에 index 출력

전체소스

#include<iostream>
#include<stack>
using namespace std;
int N, num[500001];
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    stack<int> st;
    cin >> N;
    for (int i = 1; i <= N; ++i) {
        cin >> num[i];
        if (st.empty()) {
            st.push(i);
            cout << 0 << ' ';
        }
        else if (num[st.top()] < num[i]) {
            while (!st.empty() && num[st.top()] < num[i]) st.pop();
            if (st.empty())
                cout << 0 << ' ';
            else
                cout << st.top() << ' ';
            st.push(i);
        }
        else {
            cout << st.top() << ' ';
            st.push(i);
        }
    }
}
728x90

'Algorithm > BOJ' 카테고리의 다른 글

공유기 설치 - 2110번  (0) 2019.06.09
최소값 찾기 - 11003번  (0) 2019.05.19
나머지 합 - 10986번  (0) 2019.05.19
1931번 - 회의실 배정  (0) 2019.05.05
6549번 - 히스토그램에서 가장 큰 직사각형  (0) 2019.05.02

댓글