코딩테스트 일기장

[프로그래머스 코딩테스트 연습] 택배상자 문제 javascript (정답포함)

yong_zz 2022. 11. 9. 19:11

코딩테스트 1레벨을 전부 다 푼 뒤에 2레벨 문제를 풀려고 했으나..

 

1레벨을 풀다보니 이정도는 나에게 너무 쉽다는 자만감?이 생겨서.. 2레벨을 도전해보았다

 

2레벨중에서 난이도가 낮을 것 같은 문제명을 찾아 택배상자 라는 녀석을 고르게 되었다

 

프로그래머스 코딩테스트 연습 Lv2 택배상자 지문

 

문제 내용을 보면 간단하다.. 

컨베이너 벨트 arr, 보조 컨베이너 벨트 arr을 만들어서 order 변수 순서에 맞춰서 넣어주면 되는거였다.

 

읭?? 나는 이문제를 보고 좀 의문이 들었다.. 개인적으로.. 이전에 리뷰한 Lv1에 해당하는 햄버거 문제가 더 어렵다고 체감이 되었으니...

 

그건 그거고.. 풀이를 해보았는데 생각보다 빠르게 풀었다.

 

완성본
function solution(order) {
    var answer = 0;

    let order_length = order.length;

    let arr = [];
    let temp = [];

    for(let i=1; i<=order_length; i++){
        arr.push(i); 
    }

    let arr_i = 0;
    let order_i = 0;
    while(true){
        let temp_length = temp.length-1;

        if(order_length === order_i){
            break;
        }

        if(arr_i >= order_length){ // 컨베이너 벨트에서 모든 택배상자가 지나간 경우 보조컨베이너 벨트에서 체크
            if(temp_length > -1 && temp[temp_length] === order[order_i]){
                temp.pop();
                answer ++;
                order_i++;
            }else{
                break;
            }
            continue;
        }

        if(arr[arr_i] == order[order_i]){ // 컨베이너 벨트에서 택배차로 이동
            answer ++;
            order_i++;
        }else if(temp_length > -1 && temp[temp_length] === order[order_i]){ // 보조 컨베이너 벨트에서 택배차로 이동
            temp.pop();
            answer ++;
            order_i++;
            continue;
        }else if(arr[arr_i]){ // 컨베이너 벨트에서 보조 컨베이너 벨트로 이동
            temp.push(arr[arr_i]);
        }
        arr_i++;
    }
    return answer;
}

 

그냥.. 처음 생각 그대로 arr 두개 만들어서 작업을 했더니 한번에 테스트케이스들을 전부 통과 하였다.

 

몇몇 테스트 케이스가 시간이 꽤 오래 걸리고 메모리사용률이 높았지만 한번에 풀었다는 기분이 너무 좋았다.

 

풀이한 코드가 요상하긴 하지만.. 풀었다는 거에 의미를 두자 ㅎㅎ ^^;

(많이 풀다보면 잘 하겠지 뭐~~)