알고리즘/프로그래머스 알고리즘 공부
[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용
Totally 개발자
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;
}
반응형