개요

상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 return 하도록 solution 함수를 완성하시오.

 

1,2,3,1으로만 햄버거를 만들 수 있다 그리고 딱히 명시하진 않았지만 햄버거가 계속 쌓이고있다고 가정했으니 스택 자료구조를 떠올릴 수 있다.

 

 

프로그래머스

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

programmers.co.kr

 


풀이

이제 스택을 만들어 넣고 빼면 되는데 1(빵)이 나오는 경우만 체크해보고 나머지 경우는 전부 스택에 넣은 뒤 만약 빵이 나왔다면 가장 위 3개를 pop으로 빼서 tmp 배열에 넣어 비교해본 뒤 순서가 일치하지 않으면 다시 순서대로 넣고 조건으로 트리거 된 빵을 추가로 넣어주면 된다

 

function solution(ingredient) {
  let answer = 0;
  const stack = [];
  const len = ingredient.length;
  
  stack.push(ingredient[0]);
  stack.push(ingredient[1]);
  stack.push(ingredient[2]);

  for (let i = 3; i < len; i++) {
    if (ingredient[i] === 1 && stack.length > 2) {
      const tmp = [];
      let flag = true;
      while (tmp.length < 3) {
        tmp.unshift(stack.pop());
      }
      for (let j = 0; j < 3; j++) {
        if (tmp[j] !== j + 1) flag = false;
      }
      if (flag) answer += 1;
      else stack.push(...tmp, 1);
    } else stack.push(ingredient[i]);
  }
  return answer;
}

'알고리즘' 카테고리의 다른 글

[알고리즘] 124나라의 숫자 js  (0) 2022.10.30
[알고리즘] 키패드 누르기 js  (0) 2022.10.29
[알고리즘] 게임 맵 최단거리  (0) 2022.10.29
동적 계획법과 냅색 알고리즘  (0) 2022.10.28
BFS(너비 우선 탐색)  (0) 2022.10.24
복사했습니다!