[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용

2022. 11. 27. 18:00알고리즘/프로그래머스 알고리즘 공부

반응형

[문제]

햄버거를 빵-야채-고기-빵 순서로 포장을 합니다. 숫자 1-2-3-1로 표현했을 때, 이 조합 순서대로 햄버거를 포장한다고 가정하여 재료들이 주어졌을 때 총 몇 개의 햄버거를 포장할 수 있는지 계산하는 문제입니다. 예를 들어 [2, 1, 1, 2, 3, 1, 2, 3, 1]의 배열이 입력으로 주어졌을 때 포장되는 햄버거는 총 2개입니다. 

 

[알고리즘]

스택을 활용할 수 있습니다. (스택이 아닌 다른 방법으로도 당연히 해결 가능합니다)

 

[풀이]

아래 주석에 설명을 해놓은 것을 참고하시면 되며 먼저 burgerStack이란 배열을 하나 선언해주고, 그 스택 배열에 ingredient 배열의 요소를 push로 넣어줍니다. 그 다음 Stack의 길이가 4 이상인 경우, 맨 뒤의 Stack의 요소들이 각각 1 2 3 1인 경우 pop() 메소드를 4번 발생시켜서 push된 요소들을 제거해주고 count에 숫자 1을 더해주고 최종적으로 이 burgerCount를 return하면 됩니다.

function solution(ingredient) {
    // ingredient (1,2,3,1만 포장)
    let burgerCount = 0;
    const burgerStack = [];
    
    // ingredient 배열의 요소에 접근하기 위한 반복문
    for (let i = 0; i < ingredient.length; i++) {
        // burgerStack에 push하여 배열에 넣어줍니다.
        burgerStack.push(ingredient[i]);
        
        // burgerStack의 현재 길이를 구합니다.
        let len = burgerStack.length;
        
        // burgerStack의 길이가 4가 되지 않을 경우에는 다음 요소로 넘어갑니다.
        if (burgerStack.length < 4) {
            continue;
        }
        else if (burgerStack[len - 4] === 1 &&
                burgerStack[len - 3] === 2 &&
                burgerStack[len - 2] === 3 &&
                burgerStack[len - 1] === 1) {
            // 1 2 3 1의 조건을 충족했을 때 pop를 4번해줘서 뒤의 요소 4개를 제거합니다.
            for (let j = 0; j < 4; j++) {
                burgerStack.pop();
            }
            // count 해줍니다.
            burgerCount++;
        }
    }
    
    return burgerCount;
}

 

반응형