알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
오늘알고리즘
햄버거만들기 - https://school.programmers.co.kr/learn/courses/30/lessons/133502#
시간초과 실패로 생각을 제대로 못한 케이스다. 자꾸 좀 더 쉽게 간단하게에 집착하다보니 틀리게 된 것 같다.
function solution(ingredient) {
ingredient = ingredient.join("")
let answer = 0
while(ingredient.indexOf("1231")!=-1){
ingredient = ingredient.replace("1231","")
answer++
}
return answer
}
replace가 계속해서 반복문으로 체크되다 보니 시간 복잡도에서 넘어가 버렸다.
아래는 다르게 진행 된 풀이
function solution(ingredient) {
let count = 0;
let stack = [];
for (let i = 0; i < ingredient.length; ++i) {
stack.push(ingredient[i]);
if (stack.length < 4) continue;
if (stack[stack.length - 4] === 1
&& stack[stack.length - 3] === 2
&& stack[stack.length - 2] === 3
&& stack[stack.length - 1] === 1) {
for (let j = 0; j < 4; ++j) {
stack.pop();
}
count++;
}
}
return count;
}
코드 면으로 볼땐 훨씬 복잡해 보이지만 속도면에서 해결 됐으며 확실한 차이가 있다.
가장 큰 점은 반복을 한번만 도는 것으로 해결 된다는 것!