Practice for coding test

프로그래머스 - Level 1. 햄버거 만들기 / JavaScript (js)

Gray Park 2023. 2. 17. 11:30
728x90
반응형

문제설명

문제분석

이 문제는 입력값인 ingredient 요소를 하나씩 stack에 쌓고, stack에 쌓인 최근 4개가 햄버거를 만들 수 있는 순서대로 쌓여있는지 확인합니다. 만약 햄버거를 만들 수 있다면, stack의 4개를 빼내고 answer 카운트를 1증가합니다.

  • ingredient를 탐색하며 stack에 하나씩 추가한다.
  • stack에 쌓인 최근 4개의 요소로 햄버거를 만들 수 있는지 검사한다.
    • 햄버거를 만들 수 있다면 stack의 최근 4개 요소를 제거하고, answer를 증가한다.

요약했으니, 코드를 짜보겠습니다.

이해하기 쉽게 코드작성하기

function solution(ingredient) {
    var answer = 0;
    const stack = [];

    for(let i of ingredient) {
    	// stack에 ingredient 요소 추가
        stack.push(i);
        
        if(canMakeBugger(stack)) {
            answer++;
            stack.length -= 4;
        }
    }
    return answer;
}

// stack 내 최근 4개의 요소로 햄버거를 만들 수 있는지 검사
function canMakeBugger(arr) {
    const [isFirstOne, isTwo, isThree, isSecondOne] = arr.slice(arr.length-4);
    return (isFirstOne === 1
        && isTwo === 2
        && isThree === 3
        && isSecondOne === 1);
}

코드 설명

분석한 대로 작성한 코드라 부가 설명은 없습니다. 위 코드와 같은 로직을 메소드를 이용해 깔끔하게 나타내면 다음과 같습니다.

function solution(ingredient) {
    const stack = [];
    return ingredient.reduce((a,c) => {
        stack.push(c);
        if(canMakeBugger(stack)) {
            stack.length -= 4;
            a += 1;
        }
        return a;
    }, 0);
}

function canMakeBugger(arr) {
    const [isFirstOne, isTwo, isThree, isSecondOne] = arr.slice(arr.length-4);
    return (isFirstOne === 1
        && isTwo === 2
        && isThree === 3
        && isSecondOne === 1);
}
728x90
반응형