[코딩테스트] 23/12/13 - 뒤에 있는 큰 수 찾기 (Level2)
문제 설명
정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다. 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
제한사항
- 4 ≤
numbers의 길이 ≤ 1,000,000- 1 ≤
numbers[i]≤ 1,000,000
- 1 ≤
문제풀이
- stack을 사용하여 최적화해서 풀어야 시간오버가 안난다.
코드 (C++)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vector<int> solution(vector<int> numbers) {
vector<int> answer(numbers.size(), -1);
stack<int> s;
s.push(0);
for (int i = 1; i < numbers.size(); ++i)
{
while (!s.empty() && numbers[s.top()] < numbers[i])
{
answer[s.top()] = numbers[i];
s.pop();
}
s.push(i);
}
return answer;
}
피드백
- for문을 두개사용할경우 On2 가되기때문에 시간오버가 생긴다.
- stack을 사용하여 이전값을 빠르게 조회할수있도록한다.
시간 오버된 코드 (C++)
1
2
3
4
5
6
7
8
9
10
11
vector<int> solution(vector<int> numbers) {
vector<int> answer(numbers.size(), -1);
for (int i = 1; i < numbers.size(); ++i)
for (int j = i + 1; j < numbers.size(); ++j)
if (numbers[i] < numbers[j])
{
answer[i] = numbers[j];
break;
}
return answer;
}
This post is licensed under CC BY 4.0 by the author.