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 |
댓글