-
[백준/BOJ] 17298번 오큰수 (C++)알고리즘 문제풀이/백준 2020. 12. 31. 14:43
스택 유형의 문제
프로그래머스의 주식가격과 비슷한 문제였습니다. 인덱스 번호를 스택에 넣어주면서 스택의 top을 인덱스로하는 벡터의 값과 현재 인덱스의 벡터의 값을 비교하여 오큰수를 찾아내는 것이 포인트입니다. 비교가 끝난 후, 스택에 남아있는 인덱스 번호는 만족하는 오큰수를 가지지 않으므로 따로 -1을 대입하면 됩니다.
#include <iostream> #include <vector> #include <stack> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> v(n), answer(n); stack<int> s; for(int i = 0; i < n; i++) { cin >> v[i]; } for(int i = 0; i < n; i++) { while(!s.empty() && v[s.top()] < v[i]) { answer[s.top()] = v[i]; s.pop(); } s.push(i); } // 스택에 남아 있는 인덱스는 만족하는 오큰수가 없음 while(!s.empty()) { answer[s.top()] = -1; s.pop(); } for(int i = 0; i < n; i++) { cout << answer[i] << " "; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 1932번 정수 삼각형 (C++) (0) 2021.01.01 [백준/BOJ] 1003번 피보나치 함수 (C++) (0) 2021.01.01 [백준/BOJ] 1167번 트리의 지름 (C++) (0) 2020.12.30 [백준/BOJ] 1238번 파티 (C++) (0) 2020.12.30 [백준/BOJ] 1929번 소수 구하기 (C++) (0) 2020.12.29