728x90
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;
}
728x90
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - 카드 뭉치 JavaScript (0) | 2023.02.25 |
---|---|
프로그래머스 코딩테스트 연습 - 숫자 변환하기 JavaScript (0) | 2023.02.11 |
프로그래머스 코딩테스트 연습 - 숫자 카드 나누기 JavaScript (0) | 2023.01.08 |
프로그래머스 코딩테스트 연습 - 마법의 엘리베이터 JavaScript (0) | 2023.01.01 |
프로그래머스 코딩테스트 연습 - 문자열 나누기 JavaScript (0) | 2023.01.01 |