[Programmers]햄버거 만들기(java/lv1)

Mijeong Ryu·2023년 6월 1일
0

Programmers

목록 보기
7/50

코드1 (50%)

import java.util.*;
class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        String s = "";
        /*
        for(int i=0; i<ingredient.length; i++){
            s = s+ingredient[i];
            if(s.contains("1231")){
                s = s.replaceFirst("1231","");
                answer++;
            }
        }
        */
        
        
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<ingredient.length; i++){
            sb.append(ingredient[i]);
            if (sb.indexOf("1231") > -1) {
                int index = sb.indexOf("1231");
                sb.replace(index, index + 4, "");
                answer++;
            }
        }
        
        return answer;
        
    }
}

코드2

import java.util.*;
class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        Stack<Integer> st = new Stack<>();
        
        for(int i=0; i<ingredient.length; i++){
            st.push(ingredient[i]);
            
            if(st.size()>=4){
                int n = st.size() ;
                if(st.get(n-1) == 1 && st.get(n-2) == 3 && st.get(n-3) == 2 && st.get(n-4) ==1){
                    st.pop();
                    st.pop();
                    st.pop();
                    st.pop();
                    answer++;
                }
            
            }
        }
        return answer;
    }
}

풀이

처음에는 코드1의 주석 부분과 같이 String으로 풀었다. 풀면서도 String이라 효율성 문제가 있을 것 같았는데, 역시 정확도 100 효율 50으로 FAIL!
그래서 문자열 변환이 잦을 때 더 비용이 적은 StringBuilder를 사용했다. PASS될 거라 생각했는데, String을 사용했을 때와 동일한 이유로 FAIL이였다.
그래서 문자열 방법은 좋은 풀이가 아니라고 생각했고 처음부터 다시 생각했다.

문제 자체가 햄버거를 "쌓는다..." = "스택" 이라는 생각이 들어서 코드2와 같이 스택으로 풀었다.

0개의 댓글