문제 : 프로그래머스 뒤에 있는 큰 수 찾기 🔎
난이도 : LEVEL 2
1️⃣ 정수로 이루어진 배열 numbers의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
2️⃣ 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요.
3️⃣ 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
뒷 큰 수는 2가지 조건을 만족해야 한다.
1️⃣ 자신보다 큰 숫자여야 한다.
2️⃣ 큰 숫자 중에서 가장 가까이 있고 뒤에 있는 수여야 한다.
즉, 자신과 가장 가까이 있는 수를 보장하는 stack을 사용해야 한다.
☝️stack에 대해서 간단히 요약해보자면, stack에 순서대로 배열에 넣었을 때 [1,2,3,4,5] stack의 top = 5는 바로 아래의 4(다음으로 top이 될 숫자)와 가장 가까이 있다는 것을 알 수 있다!!
참고 자료 : https://jaimemin.tistory.com/2237
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer(numbers.size(), -1);
stack<pair<int, int>> nums;
for (int i = 0; i < numbers.size(); i++){
while (!nums.empty()){
pair<int, int> top = nums.top();
if (top.first >= numbers[i]){
break;
}
answer[top.second] = numbers[i];
nums.pop();
}
nums.push({ numbers[i], i });
}
return answer;
}