본문 바로가기

공부/예제 풀이

[프로그래머스] 햄버거 만들기

첫번째 풀이가 시간초과가 났다. 원인은 반복문 안의 indexOf()는 시간복잡도가 높음!

stack 자료구조를 사용해봄. 이 자료구조는 First In Last Out 마지막에 들어온게 가장 먼저 나가는 식. 이 자료구조를 선택한 이유는 순서대로 1231이 들어올때마다 로직이 돌아야 한다. 따라서 마지막에 어떻게 값이 들어오는지가 중요하기 때문에 stack을 사용. 마지막 4개의 값들을 체크해주기만 하면 된다.

 

풀이

// 첫번째 풀이 방법 : StringBuilder를 이용해 ingredient값을 append()
// -> while()문을 이용해 StringBuilder의 indexOf를 이용해 "1231"을 찾음
// -> 있으면 delete(index, index+4)해서 지워줌, answer++
// -> 무한반복 -> indexOf("1231") ==-1 break;
// 첫번째 풀이 실패 시간초과 났음 이유: 반복문 안에 indexOf()는 시간복잡도 높음

import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        if(ingredient.length>3){
            //넣을 때 1231이 있으면 pop을 4번해주기
            for(int i=0;i<ingredient.length;i++){
                stack.push(ingredient[i]);
                if(stack.size()>3 &&
                    (stack.get(stack.size()-4)==1) &&
                    (stack.get(stack.size()-3)==2) &&
                    (stack.get(stack.size()-2)==3) &&
                    (stack.get(stack.size()-1)==1)){
                    for(int j=0;j<4;j++) {stack.pop();} 
                    answer++;
                }
            }
            return answer;
        }else return 0;
    }
}

'공부 > 예제 풀이' 카테고리의 다른 글

[프로그래머스] 바탕화면 정리  (0) 2023.12.19
[프로그래머스] 성격 유형 검사하기  (1) 2023.12.19
약수의 갯수 구하기  (0) 2023.11.30
백준 1475(실패)  (0) 2023.10.25
백준 11650  (0) 2023.10.24