CodingTest/99클럽2024스터디
99클럽 코테 스터디 1일차 TIL, 프로그래머스 / 뒤에 있는 큰수
mrawesome
2024. 7. 22. 21:47
#include <string>
#include <vector>
#include <stack>
using namespace std;
int total_num;
int find(int originIdx, int *numbers)
{
int answer = -1;
if (originIdx == total_num - 1)
{
return -1;
}
for (int idx = total_num - 1; idx > originIdx; --idx)
{
if (numbers[idx] > numbers[originIdx])
{
answer = numbers[idx];
}
}
return answer;
}
vector<int> solution(vector<int> numbers) {
int tot_cnt = numbers.size();
stack<int> stack;
vector<int> answer;
answer.resize(tot_cnt);
for (int i = 0; i < tot_cnt; ++i)
answer[i] = - 1;
// stack 을 하나 두기
// vector 에 새로운 값을 접근할 때마다 stack 에 있는 값을 꺼내면서
// 만약 현재 값보다 작으면, 해당 값으로 세팅해주기
// 그리고 현재 접근한 대상의 idx 를 추가
for (int idx = 0; idx < tot_cnt; ++idx)
{
int cur_num = numbers[idx];
while(stack.empty() == false)
{
int stack_idx = stack.top();
int stack_num = numbers[stack_idx];
if (stack_num >= cur_num)
{
break;
}
stack.pop();
answer[stack_idx] = cur_num;
}
stack.push(idx);
}
return answer;
}