Algorithm
[Algorithm] 백준 17298 오큰수 c++
반응형
https://www.acmicpc.net/problem/17298
풀이
- 수열(
a
)의 왼쪽부터 인덱스와 스택을 활용해 오큰수 탐색한다. - 스택에 들어있는 값은 아직 오큰수를 구하지 못하였거나 오큰수가 없는 수의 인덱스이다.
세부 풀이
- 우선 스택에 첫 인덱스인
0
을 넣고 다음 인덱스로 넘어간다. - 스택에 들어있는 값과 현재 인덱스에 각각 대응하는 값을 비교한다.
- 현재 인덱스의 값이 더 큰 경우 오큰수를 발견한 것이다.
nge
에 값을 넣는다. - (스택에 들어있는 값이 더 큰 경우 오큰수를 발견하지 못한 것이다.)
- 스택이
empty
할 때까지2-3
번을 반복한다. - 현재 인덱스를 스택에 넣고 다음 인덱스로 넘어간다.
- 수열을 모두 탐색할때까지
2-6
번을 반복한다. 7
번까지 마치고 스택에 남아있는 값은 오큰수가 없는 값이므로-1
을 넣는다.
소스코드
#include <stack>
using namespace std;
int a[1000001];
int nge[1000001];
stack<int> s;
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++) cin>>a[i];
for(int i=0; i<n; i++){
while(!s.empty() && a[s.top()] < a[i]){
nge[s.top()] = a[i];
s.pop();
}
s.push(i);
}
while(!s.empty()){
nge[s.top()] = -1;
s.pop();
}
for(int i=0; i<n; i++) cout<<nge[i]<<" ";
return 0;
}
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 전화번호 목록 python (0) | 2021.09.30 |
---|---|
[Algorithm] 프로그래머스 입국심사 c++ (0) | 2021.09.29 |
[Algorithm] 백준 13305 주유소 c++ (0) | 2021.09.23 |
[Algorithm] 백준 1463 1로 만들기 c++ (0) | 2021.09.14 |
[Algorithm] 백준 9184 신나는 함수 실행 c++ (0) | 2021.09.10 |