본문 바로가기
Algorithm

프로그래머스 - 햄버거 만들기(자바스크립트)

by 녹차맛개구리 2023. 1. 24.

 

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

 

프로그래머스

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

programmers.co.kr

배열로 들어온 ingredient 값을 join을 통해 문자열로 변환시킨 뒤 stack 변수에 저장하여

 

stack의 길이만큼 for 문을 돌며 indexOf 를통해 1231이 있는지 찾고 ( indexOf는 찾는 값이 없다면  -1이 리턴된다 )

찾았다면 replace를 통해 1231을 지워주고 answer을 1씩 더한다 

function solution(ingredient) {
    var answer = 0;
    var stack = ingredient.join("");

    for (let i = 0; i < stack.length; i++) {
        if(stack.indexOf('1231') !== -1) {
            stack = stack.replace('1231', "");
            answer += 1
        }
        
    }

    return answer;
}

\

이런식으로 코드를 짯는데 

아주 그냥 코드가 시간을 초과 해버렸구여,,, indexOf가 많이 잡아먹나??.. 알아봐야할듯,,,,

 

function solution(ingredient) {
    var answer = 0;
    var ingredient = ingredient.join("");
    var stack = "";

    for (let i = 0; i < ingredient.length; i++) {
        stack += ingredient[i];
        if (stack.length >= 4) {
            let search = stack.slice(-4);
            if (search === '1231') {
                answer += 1
                stack = stack.slice(0, -4)
            }
        }
    }
    return answer;
}

문자열로도 풀어봤더니 시간초과래.!!!!!!!!!!!!!!

 

다들 stack으로 풀었던데 정녕 stack 밖에없는 거시여!!?

 

결론 코드

function solution(ingredient) {
    var answer = 0;
    var ingredient = ingredient.join("");
    var stack = [];

    for (let i = 0; i < ingredient.length; i++) {
        stack.push(ingredient[i]);
        if (stack.length >= 4) {
            let search = stack.slice(-4).join("");
            if (search === '1231') {
                stack.pop();
                stack.pop();
                stack.pop();
                stack.pop();
                answer++;
            }

        }

    }

    return answer;
}

 

728x90

'Algorithm' 카테고리의 다른 글

프로그래머스 - 3진법 뒤집기(자바스크립트)  (0) 2023.03.02