코딩테스트 연습

프로그래머스 코딩테스트 연습 - 뒤에 있는 큰 수 찾기 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;
}