알고리즘 공부 - Day06

설하나·2022년 10월 17일
0

알고리즘

목록 보기
6/22
post-thumbnail

알고리즘공부 6일차...! 주말에 열심히 쉬고 일한만큼 오늘도 열심히 풀어보자구~

🖥 프로그래머스 🖥

1. 택배 상자

택배상자는 크기가 모두 같으며 1번 상자부터 n번 상자까지 번호가 증가하는 순서대로 컨테이너 벨트에 일렬로 놓여 전달된다.
컨테이너 벨트는 한 방향으로만 진행이 가능해서 벨트에 놓인 순서대로(1번 상자부터) 상자를 내릴 수 있습니다.택배 기사님이 미리 알려준 순서에 맞게 영재가 택배상자를 실어야 합니다.
택배를 순서대로 실기 위해서 보조 컨베테이너 벨트를 주어주는데,보조 컨테이너 벨트는 앞 뒤로 이동이 가능하지만 입구 외에 다른 면이 막혀 있어서 맨 앞의 상자만 뺄 수 있습니다.
즉, 가장 마지막에 보조 컨테이너 벨트에 보관한 상자부터 꺼내게 됩니다
보조 컨테이너 벨트를 이용해도 기사님이 원하는 순서대로 상자를 싣지 못 한다면, 더 이상 상자를 싣지 않습니다. 택배 기사님이 미리 알려준 순서가 주어지고 이를 해결하는 알고리즘을 생각해보는 문제였다.
나의 풀이는 아래와 같다.

function solution(order) {
    var answer = 1;
    const box = [1,2,3,4,5]
    let temp = []
    //1. 첫번재 상자는 무조건 담음.
    const index = box.indexOf(order[0])
    for(let j = 0;j<index;j++){
        temp.push(box[0])
        box.shift()
    }
    //2. 그이후 박스들의 로직
    for(let i = 1;i<order.length;i++){
        //2-1.컨테이너에서 나오는 박스와 넣어야할 박스번호 비교하기
        if(order[i]===box[0]){
            box.shift()
            answer ++
        }else if(order[i]===temp[temp.length-1]){
            temp.pop()
            answer ++
        }else{
            return answer
        }
    }
    return answer;
}

이번에는 노트에다가 그림을 그려가면서 생각해 보았다.

테스트는 통과했는데 제출 후 채점하기에서 4번 케이스만 통과하는,,,, 불상사가 발생했다..왜그럴까 고민을하다가 블로그를 쓰고있는데 내가 상자를 5개로 고정하고 생각해서라는 생각이 들었다.

function solution(order) {
    var answer = 1;
    let box = []
    let temp = []

    for(let boxIdx =0;boxIdx<order.length;boxIdx++){
        box.push(boxIdx+1)
    }

    for(let i = 1;i<order.length;i++){
        //1. 첫번재 상자는 무조건 담음.
        if(order[i]!==box[0] || order[i]===temp[temp.length-1]){
            const index = box.indexOf(order[i])
            for(let j = 0;j<index;j++){
                temp.push(box[0])
                box.shift()
            }
        }
        //2. 그이후 박스들의 로직
        //2-1.컨테이너에서 나오는 박스와 넣어야할 박스번호 비교하기
        if(order[i]===box[0]){
            box.shift()
            answer ++
        }else if(order[i]===temp[temp.length-1]){
            temp.pop()
            answer ++
        }else{
            return answer
        }
    }
    return answer;
}

위와같이 코드를 바꿨지만 시간초과 문제는 해결하지 못하였다.

✏️ shift(),pop(),push()

자바스크립트 배열에서 값을 추가하거나 제거하는 함수로 .push() .pop() .unshift() .shift() 가 있다
즉, 배열에서 사용하는 매서드이다.

shift() 파라미터

shift() 메서드는 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환합니다. 이 메서드는 배열의 길이를 변하게 합니다.

const array1 = [1, 2, 3];
const firstElement = array1.shift();

console.log(array1);
// expected output: Array [2, 3]
console.log(firstElement);
// expected output: 1

pop() 파라미터

pop() 메서드는 배열에서 마지막 요소를 제거하고 그 요소를 반환합니다.

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var popped = myFish.pop();

console.log(myFish); 
// ['angel', 'clown', 'mandarin' ]
console.log(popped); 
// 'sturgeon'

push() 파라미터

push() 메서드는 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환합니다.

var sports = ['축구', '야구'];
var total = sports.push('미식축구', '수영');

console.log(sports);
// ['축구', '야구', '미식축구', '수영']
console.log(total);  
// 4

[ 출처 ]

profile
Backend

0개의 댓글