ingredient에 햄버거의 재료가 배열로 주어진다.
햄버거는 [1,2,3,1] 순서로 만들 수 있다.( 1 : 빵, 2 : 야채, 3 : 패티 )
ingredient로 주어진 배열을 통해 만들 수 있는 햄버거의 수를 구하여라.
접근 방법
만약 [1, 1, 2, 3, 1, 2, 3, 1, 1]이라는 ingredient가 주어진다면
[1, 1, 2, 3, 1, 2, 3, 1, 1] 에서 한번 햄버거가 만들어지고 해당 재료를 사용했으므로
[1, 2, 3, 1, 1] 에서 햄버거가 또 만들어져서 최종적으로 2개의 햄버거가 만들어진다.
이처럼 사용한 재료가 빠진다는 것이 핵심이다.
하지만 배열에서 중간의 값을 넣거나 빼면 다시 배열의 모든 index가 재할당 되므로 비효율적이기 때문에
빈 배열을 만들고 ingredient의 재료를 하나씩 넣으면서 [1,2,3,1] 이라는 배열이 들어오면
끝에서부터 제거하는 방식으로 진행하였다.
const stack = []; ingredient.forEach(e => { stack.push(e) if(stack.slice(stack.length - 4, ).join("") === [1,2,3,1].join("")){ answer += 1; stack.splice(stack.length - 4, ); } })
먼저 빈배열 stack을 하나 만들고
1. ingredient의 요소를 하나씩 stack에 삽입한다.
2. 만약 stack의 마지막 4개의 요소와 [1, 2, 3, 1]이 같다면
2. 1 answer을 증가시키고
2. 2 stack의 마지막 4개의 요소를 삭제한다. (pop을 4번 사용해도 됨)
※배열을 참조형 자료구조이기 때문에 [1,2,3] === [1,2,3] // false 를 출력한다.
때문에 문자열로 변환하여 같은지 비교하였다.
function solution(ingredient) {
var answer = 0;
const stack = [];
ingredient.forEach(e => {
stack.push(e)
if(stack.slice(stack.length - 4, ).join("") === [1,2,3,1].join("")){
answer += 1;
stack.splice(stack.length - 4, );
}
})
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Javascript] 실전 대비 모의고사 3차 3번 (0) | 2022.08.12 |
---|---|
[Javascript] 실전 대비 모의고사 3차 1번 (0) | 2022.08.12 |
[Javascript] 실전 대비 모의고사 2차 2번 (0) | 2022.07.28 |
[Javascript] 실전 대비 모의고사 2차 1번 (0) | 2022.07.27 |
[Javascript] 실전 대비 모의고사 1차 3번 (0) | 2022.07.13 |