프로그래머스/lv2/154539. 뒤에 있는 큰 수 찾기

SITY·2023년 10월 13일
0

Cpp_Algorithm

목록 보기
29/43

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를 넣을 필요가 없음
이렇게 할 시 강제로 반복적인 순회를 할 필요가 없고, 큰 값을 찾을 때 적은 반복으로 이전에 지나온 인덱스 ( 큰 값을 찾지 못한 인덱스 )에 해당하는 값을 할당해줄 수 있다

profile
·ᴗ·

0개의 댓글