vector<int> solution(vector<int> numbers) {
vector<int> answer(numbers.size(), -1);
stack<int> s;
for (int i = 0; i < numbers.size(); i++) {
int n = numbers[i];
while (!s.empty() && numbers[s.top()] < n) {
answer[s.top()] = n;
s.pop();
}
s.push(i);
}
return answer;
}
인덱스 별로 직접 찾는 순회하며 큰 값을 찾는 방식이 아닌 stack에 저장해두었다가 인덱스를 돌며 stack의 top -> 최근 지난 인덱스의 값보다 현재 값이 더 크면 answer[s.top]에 현재 인덱스의 값을 넣는 방식이다.
answer은 -1로 numbers의 크기만큼 할당해준다. 찾지 못한 값은 어차피 -1이기 때문에 따로 -1를 넣을 필요가 없음
이렇게 할 시 강제로 반복적인 순회를 할 필요가 없고, 큰 값을 찾을 때 적은 반복으로 이전에 지나온 인덱스 ( 큰 값을 찾지 못한 인덱스 )에 해당하는 값을 할당해줄 수 있다