https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
문제

문제풀이
#include <bits/stdc++.h>
using namespace std;
//오큰수
//Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미
//그러한 수가 없는 경우에 오큰수는 -1
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
stack<int> st;
vector<int> vc;
int answer[1000001]={0,};
int n;
cin >> n;
for(int i=0;i<n;i++){
int input;
cin >>input;
vc.push_back(input);
}
//역순으로
for(int i=n-1;i>=0;i--){
while(!st.empty() && st.top() <= vc[i]){
st.pop();
}
if(st.empty()){
answer[i] = -1;
//cout << -1 <<' ';
}else{
answer[i] = st.top();
//cout << st.top()<<' ';
}
st.push(vc[i]);
}
for(int i =0;i<n;i++){
cout << answer[i] <<' ';
}
}
문제의 포인트
- 역순으로 생각하기
- 스택의 gold 문제들이 몇몇(2493,6198,...)이 유사한 형태를 가지고 있음.
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
| [c/c++] BOJ 5430번 문제 - AC (0) | 2022.03.07 |
|---|---|
| [c/c++] BOJ 2164번 문제 - 카드2 (0) | 2022.03.07 |
| [c/c++] BOJ 6198번 문제 - 옥상 정원 꾸미기 (0) | 2022.02.25 |
| [c/c++] BOJ 2493번 문제 - 탑 (0) | 2022.02.25 |
| [c/c++] BOJ 1874번 문제 - 스택 수열 (0) | 2022.02.25 |