본문 바로가기

프로그래머스 - 햄버거 만들기 (스택) JS 본문

개발/algorithm

프로그래머스 - 햄버거 만들기 (스택) JS

자전하는명왕성 2023. 10. 16. 09:52

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

스택의 원리에 대해 이해하고 있다면 간단히 해결할 수 있는 문제다.

사실 이 풀이 이전에는 replace 메서드를 활용하여 풀이했는데, 절반 이하의 테스트 케이스에서 시간초과로 탈락했다.

 

스택을 활용한 풀이과정은 다음과 같다.

먼저 스택으로 활용하기 위한 배열을 만든 후, 각각의 값이 들어올 때마다 스택에 추가해준다.

이때 만약 스택에서 마지막에 위치하는 4개의 요소가 '1231'(빵 - 야채 - 고기 - 빵)과 같다면

해당 마지막 4개의 요소를 삭제하고 결괏값에 + 1을 추가한다.

 

전체 소스 코드

function solution(ingredient) {
  let result = 0
  const stack = []
  const target = '1231'

  ingredient.forEach(el => {
    stack.push(el)
    if(stack.slice(-4).join('') === target) {
      stack.splice(-4)
      result ++
    }
  })

  return result
}

 

위 코드에서는 slice와 splice 메서드가 사용되었다.

단순히 구분하면,

slice(a,b)는 배열의 a~b 인덱스 요소를 '조회하는' 메서드고,

splice(a,b)는 문자열의 a 인덱스부터 b개를 '자르는' 메서드라고 이해하면 편하다.

이때 인자로 '음수'가 들어가는 경우는 뒤에서부터 인덱스를 다루는 경우다.



비슷한 예시로 배열에서 뒤에서 n번째 인덱스를 검색하고자 할 때는 at 메서드를 사용하기도 한다.

const arr = [1,2,3,4] 라고 할 때

arr.at(-2) 라는 코드를 사용하는 경우 '3'이 출력된다. (뒤에서 두번째)

Comments