Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리액트
  • javascript
  • ReactNative
  • 알고리즘
  • 코딩테스트
  • 코칭스터디
  • vite
  • Git
  • 자바스크립트
  • Object
  • 기초
  • typescript
  • 백준
  • 프로그래머스
  • Error
  • react
  • react-native
  • 회고

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[programmers / JavaScript] 햄버거 만들기
Study/Algorithm

[programmers / JavaScript] 햄버거 만들기

2023. 7. 7. 00:43
https://school.programmers.co.kr/learn/courses/30/lessons/133502

// test
const ingredient = [2, 1, 1, 2, 3, 1, 2, 3, 1];

sol 1

function solution(ingredient) {
  let count = 0;
  let stack = [];
  for (let i = 0; i < ingredient.length; i++) {
    stack.push(ingredient[i]);
    if (stack.length >= 4) {
      const hamburger = stack.slice(-4).join("");
      if (hamburger === "1231") {
        console.log(hamburger);
        stack.splice(-4, 4);
        count++;
      }
    }
  }

  return count;
}

스택을 하나 만들고 배열을 하나씩 담다가 1231 이 완성되면 카운트하는 방식으로 해결했다. 테스트 케이스처럼 중간에 1231을 빼고 난 후 그 자리의 앞뒤의 조합으로 다시 1231이 만들어지는지 알아야 하는데, 원본 배열 안에서 이를 해결하려 하면 속도가 느려질 수 있다( 여태 지나온 배열을 처음부터 다시 탐색하기 때문 ) 그래서 이런 문제는 스택을 만들어 여기서 조건을 만족하는지 찾는 것이 좋다.

 

sol 2

function solution(ingredient) {
  let count = 0;

  for (let i = 0; i < ingredient.length; i++) {
    if (ingredient.slice(i, i + 4).join("") === "1231") {
      count++;
      ingredient.splice(i, 4);
      i -= 3;
    }
  }

  return count;
}

 

답안 제출 후 다른 풀이 방법을 찾다가 발견했는데 for문이 도는 와중에 i -= 3 처럼 인덱스를 조절하여 뒤로 가는 게 가능하다는 걸 알았다. (충격) 다만 sol 1에 언급한 것처럼 splice를 사용해 배열을 자르면서 원본  배열을 처음부터 다시 탐색하기 때문에 메모리와 시간을 많이 사용한다.

 

번외로 배열이

const ingredient = [1, 2, 3, 1, 2, 3, 1, 1];

인 경우 앞에서부터 1231 을 탐색했다면 햄버거는 하나 밖에 못 만들지만 중간의 1231을 먼저 잘라내면 앞뒤의 조합으로 햄버거를 총 2개 만들 수 있다. 즉 주어진 배열에서 최대로 만들 수 있는 햄버거 개수를 물었다면 이런 케이스까지 처리해야 했지만 이번 문제는 배열의 앞에서부터 탐색한다는 조건이 붙어있기 때문에 고려할 필요는 없다. 문제를 잘 읽자

저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[BEAKJOON / node.js] 26069 붙임성 좋은 총총이  (0) 2022.11.19
[programmers / JavaScript] 연속된 수의 합  (0) 2022.11.17
[BEAKJOON / node.js] 16120 PPAP  (0) 2022.07.11
[BEAKJOON / node.js] 11509 풍선 맞추기  (0) 2022.07.06
[BEAKJOON / node.js] 1946 신입 사원  (0) 2022.07.04
    'Study/Algorithm' 카테고리의 다른 글
    • [BEAKJOON / node.js] 26069 붙임성 좋은 총총이
    • [programmers / JavaScript] 연속된 수의 합
    • [BEAKJOON / node.js] 16120 PPAP
    • [BEAKJOON / node.js] 11509 풍선 맞추기
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바