코딩테스트 연습
프로그래머스 코딩테스트 연습 - 뒤에 있는 큰 수 찾기 JavaScript
citron031
2023. 2. 5. 16:00
function solution(numbers) {
const answer = [];
for(let i = 0; i < numbers.length; i++) {
let tmp = -1;
for(let j = i + 1; j < numbers.length; j++) {
if(numbers[j] > numbers[i]) {
tmp = numbers[j];
break;
}
}
answer.push(tmp);
}
return answer;
}
- 일단, 맨 처음에 가장 간단한 방법으로 구현했다.
- 하지만, 역시 시간 초과 문제가 발생하였다.
- 스택을 사용하여 해결할 수 있다는 조언을 듣고, 다음과 같이 코드를 수정하여 문제를 해결하였다.
- 값이 증가하는 추세와 하락하는 추세일 때를 구분하여 코드를 작성한다.
function solution(numbers) {
const answer = new Array(numbers.length).fill(-1);
const stack = [];
for(let i = 0; i < numbers.length; i++) {
if(stack.length === 0 || numbers[i - 1] > numbers[i]) {
// 감소
stack.push(i);
} else {
// 증가
while(stack.length !== 0 &&
numbers[stack[stack.length - 1]] < numbers[i]) {
answer[stack.pop()] = numbers[i];
}
stack.push(i);
}
}
return answer;
}