[프로그래머스 코딩테스트 연습문제] 뒤에 있는 큰 수 찾기 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2024년 1월 5일
0

코딩테스트연습

목록 보기
73/98
post-thumbnail
post-custom-banner

1. 문제 설명

2. 제한사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-01-05)faild

이번 문제를 풀면서 일전에 쓰던 sort 메서드의 콜백 함수의 쓰임에 대해서 좀 더 자세히 알 수 있었던 시간이었는데요. check를 false로 설정한 후 해당 값이 조건에 맞을 경우(현재 값보다 뒤의 값이 클 경우) result 배열에 담아주고 check를 true(찾았다는 의미)로 할당하고, 조건에 맞지 않는 경우(또 하나의 if문을 써준 이유는, 처음 조건문에서 else문을 써버리면 같은 것들도 포함되기 때문에 else문을 생략)

못 찾은 상태(check는 false)이므로 -1을 배열에 푸쉬해주는 로직으로 깔아 넣었는데 음... 시간 초과가 뜨더라고요. 나름 shift랑 while문 연습한다고 했는데 시간 초과가 좀 떠서 이중 for문으로 shift를 쓰는게 아니라 그냥 인덱스를 고르는 방법을 사용했는데 이것도 시간 초과가 뜨더라고요... 분명 맞긴 하지만 효율성 측면에서는 좀 떨어지므로 알아보니 '스택'이랑 객체를 활용해야 하더라고요?

흠... 지금까지는 알고리즘을 안쓰고 최대한 풀어봤는데 level2로 넘어오니 확실히 알고리즘 공식 없이는 한계가 느껴지기 시작했습니다. 알고리즘 공부를 또 이어가야 하는 순간인 듯 합니다...!

// 1번 답안 - while문 이용
function solution(numbers) {

    let result = [];
    let num = 0;
   
    while(numbers.length > 0){

        num = numbers.shift();
        let check = false;
       
        for(let i = 0 ; i < numbers.length ; i++ ){
            if(num < numbers[i]) {
            result.push(numbers[i])
            check = true;
            break;
            }
        }
       
        if(check === false) result.push(-1)
    }
    return result;
}


// 2번 답안 - 2중 포문 이용
function solution(numbers) {

    let result = [];  
    let check = false;

    for(let i = 0; i < numbers.length ; i++){
        let check = false;
        for(let j = i+1; j < numbers.length ; j++){
            if(numbers[i] < numbers[j]){
                result.push(numbers[j]);
                check = true;
                break;
            }
        }
        if(check === false) result.push(-1)
    }
    return result;
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.
post-custom-banner

0개의 댓글