코테연습

178. 햄버거 만들기 Javascript

hxunz 2023. 1. 20. 16:47

https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

프로그래머스

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

programmers.co.kr

 

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
    상수가 포장하는 햄버거의 개수를 구하라
  • 주어진 자료는 무엇인가?
    ingredient : 재료의 정보를 나타내는 정수 배열
  • 조건은 무엇인가?
    빵-야채-고기-빵(1-2-3-1) 순서대로 햄버거를 만들 수 있다. 
    버거의 길이는 4이다.

2. 계획

  • ingredient를 순회하면서 스택을 쌓는다. 
  • 스택에서 스택의 총길이-1한 값이 1이고 그 전의 값이 3, 그전의 값이 2, 그 전의 값이 1이라면 스택 맨뒤에서부터 요소들을 네번 제거한다. 
  • 그리고 햄버거 수에 카운트를 더해준다. 

3. 실행

const solution = (ingredient) => {
  //1빵 2야채 3고기
  let burger = 0;
  let stack = [];

  for (let i = 0; i < ingredient.length; i++) {

    stack.push(ingredient[i]);

    if (stack[stack.length - 1] === 1 && stack[stack.length - 2] === 3 && stack[stack.length - 3] === 2 && stack[stack.length - 4] === 1) {
      for (let j = 0; j < 4; j++) {
        stack.pop()
      }
      burger++
    }
  }

  return burger;
}


test('solution', () => {
  expect(solution([2, 1, 1, 2, 3, 1, 2, 3, 1])).toBe(2);
  expect(solution([1, 3, 2, 1, 2, 1, 3, 1, 2])).toBe(0);
});

4. 반성

  • 문제를 다른 방식으로 해결할 수 있는가?
    재귀를 사용해서 해결할 수 있다.
const solution = (ingredient, count = 0) => {
  if (ingredient.join('').includes('1231') === false) {
    return count;
  }

  if (ingredient.join('').includes('1231') === true) {
    return solution(ingredient.join('').replace('1231', ''), count += 1)
  }
};