몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 2] 택배상자 {언어 : JavaScript} 본문

알고리즘

프로그래머스 [Lv. 2] 택배상자 {언어 : JavaScript}

스위태니 2024. 4. 26. 18:29

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/131704?language=javascript#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

function solution(order) {
    const n = order.length;
    let answer = 0;
    let currentOrder = 1;
    const stack = [];
    
    for (let i = 0; i < n; i++) {
        const currentBox = order[i];
        if (currentBox == currentOrder) {
            currentOrder++;
            answer++;
        } else if (currentBox > currentOrder) {
            while (currentBox > currentOrder) {
                stack.push(currentOrder++);
            };
            answer++;
            currentOrder++;
        } else {
            if (currentBox == stack[stack.length-1]) {
                stack.pop();
                answer++;
            } else {
                break;
            };
        };
    };
    console.log(stack)
    return answer;
}

풀이 방법

  1. 세 가지 경우의 수로 나눌 수 있었다. 
    1. currentBox == currentOrder
    2. currentBox > currentOrder
    3. currentBox < currentOrder
  2. currentBox는 택배 기사님이 원하는 택배의 순서이고 currentOrder는 컨베이어 벨트에서 뺀 박스의 순서이다.
  3. [1, 3, 2, 4, 5]로 예를 들면 답은 5가 나와야 하고 다음과 같은 과정을 거친다.
currentOrder currentBox answer stack 조건 1 조건 2 조건 3
1 => 2 1 0 => 1 [] O    
2 => 3 3 1 => 2 [] => [2]   O  
3 2 2 => 3 [2] => []     O
4 4 3 => 4 [] O    
5 5 4 => 5 [] O    
  • 1번 예시에 대해서 표를 통해 확인하면 다음과 같다.
  • [4, 3, 1, 2, 5] 이고 답은 2
currentOrder currentBox answer stack 조건 1 조건 2 조건 3
1 => 4 4 0 => 1 [1, 2, 3]   O  
4 3 1 => 2 [1, 2]     O
4 1 2 (불가능) [1, 2]     O break

느낀점

  • stack과 queue에 대해서 많이 어려워 했는데 조금 극복한 것 같아서 다행이다.