문제 설명
정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
제한사항
- 4 ≤ numbers의 길이 ≤ 1,000,000
- 1 ≤ numbers[i] ≤ 1,000,000
아이디어
1. numbers를 돌면서 큰 수를 못찾은 자리수에 해당 값을 넣어준다.
2. 큰 수를 못찾은 자리는 Stack을 이용한다.
처음에는 이중포문으로 그냥 돌렸는데 20~23번에서 시간초과가 떴다.
잘 못본 유형이라 이런 풀이는 생각지 못했는데 비슷한걸 풀어봐야 할 듯 하다.
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
stack<pair<int,int>> s;
answer = vector<int>(numbers.size(), -1);
for (size_t i = 0; i < numbers.size(); i++)
{
int value = numbers[i];
while (!s.empty() && s.top().first < value)
{
auto t = s.top();
s.pop();
answer[t.second] = value;
}
s.push(make_pair(value, i));
}
return answer;
}

'SW개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 주식가격 - 스택(C++) (0) | 2023.01.28 |
---|---|
[프로그래머스] 베스트앨범_해쉬 (C#) (0) | 2023.01.26 |
[프로그래머스] 시소 짝꿍 (c++) (0) | 2023.01.26 |
[프로그래머스] 큰 수 만들기_Greedy (c#) (0) | 2023.01.26 |
[프로그래머스] 아이템줍기_DFS (c++) (0) | 2023.01.26 |