hwooo
프로그래머스 (C/C++) 154539 : 뒤에 있는 큰 수 찾기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/154539?language=cpp
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

풀이
주어진 배열의 뒤에서부터 탐색하며 스택에 값을 저장
현재 인덱스의 값 < 뒤의 인덱스 값(스택에 저장된 값) 일 때까지 스택의 원소를 제거한다면, 현재 인덱스보다 크고 가장 가까이에 있는 뒤에 있는 큰 수를 구할 수 있음
이 때 스택이 비어있다면 현재 인덱스가 뒤를 탐색했을 때 가장 큰 값이므로 -1 저장

코드
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> numbers) {
int size = numbers.size();
vector<int> answer(size);
stack<int> bigValue;
// init
answer[size - 1] = -1;
bigValue.push(numbers[size - 1]);
// 뒤에서부터 탐색
for (int i = size - 2; i >= 0; i--) {
// 현재 원소보다 작은 뒤에 있는 숫자를 스택에서 제거
while (bigValue.size() && numbers[i] >= bigValue.top())
bigValue.pop();
// 스택이 비어있다면 -1, 스택에 값이 있다면 해당 값
answer[i] = bigValue.empty() ? -1 : bigValue.top();
// 현재 자리의 원소 스택에 저장
bigValue.push(numbers[i]);
}
return answer;
}
'Study > Algorithm' 카테고리의 다른 글
| LeetCode (C/C++) 36. Valid Sudoku (0) | 2024.05.29 |
|---|---|
| LeetCode (C/C++) 452. Minimum Number of Arrows to Burst Balloons (0) | 2024.05.29 |
| LeetCode (C/C++) 64. Minimum Path Sum (0) | 2024.05.26 |
| LeetCode (C/C++) 17. Letter Combinations of a Phone Number (0) | 2024.05.23 |
| LeetCode (C/C++) 397. Integer Replacement (0) | 2024.05.22 |