
문제 설명
배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이에 있는 수를 뒷 큰수라고 할 때, 모든 원소들에 대한 뒷 큰수를 담을 배열을 return
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이법
stack을 사용하면 쉽게 풀 수 있다
주어진 배열의 맨 끝에서부터 탐색하는데, 만일 stack이 비어있다면 뒷 큰수가 없다는 뜻이므로 answer에 -1을 담고 stack에 자신을 담는다
비어있지 않다면 스택이 빌때까지 탐색을 하는데 이때, stack의 top이 자기 자신보다 작거나 같으면은 pop 해주면서 재귀를 계속 돌고, 크면은 재귀를 빠져나가게 한다
재귀를 빠져나간 이후 stack이 비어있으면, 이 역시 뒷 큰수가 없다는 뜻이므로 answer에 -1을 담고 자기 자신을 stack에 담는다
비어있지 않으면 뒷 큰수가 있다는 뜻이므로, 스택의 top을 answer에 담고 자기 자신을 스택에 담는다
이후 answer를 reverse해서 return 해준다
소스 코드
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
stack<int> s;
for (int i = numbers.size() - 1; i >= 0; i--) {
if (s.empty()) {
s.push(numbers[i]);
answer.push_back(-1);
continue;
}
while (!s.empty()) {
if (s.top() <= numbers[i])
s.pop();
else
break;
}
if (s.empty()) {
answer.push_back(-1);
s.push(numbers[i]);
}
else {
answer.push_back(s.top());
s.push(numbers[i]);
}
}
reverse(answer.begin(), answer.end());
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 2단계 - 연속 부분 수열 합의 개수 (0) | 2024.03.19 |
---|---|
[프로그래머스] 2단계 - 오픈채팅방 (0) | 2024.03.13 |
[프로그래머스] 2단계 - 더 맵게 (0) | 2024.03.11 |
[프로그래머스] 3단계 - 이중우선순위큐 (0) | 2024.03.09 |
[프로그래머스] 2단계 - 카펫 (0) | 2024.02.17 |