코딩테스트/Programmers

[JAVA] 햄버거 만들기

hxx_1 2024. 5. 7. 21:05

< 처음 풀이 >

class Solution {
    public int solution(int[] ingredient) {
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<ingredient.length;i++){
            sb.append(ingredient[i]);
        }
        
        int answer = 0;
        int start=0;
        
        while(true){
            int index=sb.indexOf("1",start);
            boolean wrap=false;
            
            if(index+4<=sb.length()){
                String s=sb.substring(index,index+4);
             
                if(s.equals("1231")) {
                    answer++; 
                    sb=sb.replace(index,index+4,"");
                    start=0;
                    wrap=true;
                }  
                else
                     start=index+1;
            } 
            else
                break;
        }
        
        return answer;
    }
}

 

➡️ 처음에는 StringBuilder를 사용해서 문제를 풀려고 했는데, 이렇게 하니 계속 시간 초과가 나서 문제 풀이에 실패했다. 

 

< 풀이 >

import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        ArrayList<Integer> list = new ArrayList<>();
        
        for(int i=0;i<ingredient.length;i++){
            list.add(ingredient[i]);
            if(list.size() >=4 && 
               list.get(list.size()-4) == 1 &&
               list.get(list.size()-3) == 2 &&
               list.get(list.size()-2) == 3 &&
               list.get(list.size()-1) == 1){
                answer++;
                for(int j=0;j<4;j++){
                    list.remove(list.size()-1);
                }
            }
        }
        return answer;
    }
}

 

✏️ 풀이 방법

1. Arraylist를 만든다.

2. list에 값을 넣으며 list의 값의 개수가 4개 이상일 때마다 끝에서 4개의 숫자가 무엇인지 검사를 한다.

   ex) 2 1 1 2 일 때 검사 => 1 2 3 1 아님

         2 1 1 2 3 일 때 검사 => 1 2 3 1 아님

         2 1 1 2 3 1 일 때 검사 => 1 2 3 1 이므로 answer 증가, 반복문을 돌며 4개의 수 삭제 

3. 위와 같은 방법으로 검사를 한 후 answer을 return 한다. 

 

✍🏻 느낀점

 

 처음에 나는 문자열로 바꿔서 풀어야된다고 생각해서 너무 복잡하게 풀었다. 처음 시작을 어떻게 하는지도 굉장히 중요한 것 같다. 시작을 잘못하면 뒤엎기가 너무 힘들기 때문에,, 다른 블로그를 통해 이렇게 간단하게 풀 수 있다는 것을 또 배웠다. 배열이 매개변수로 주어졌을 때 , 그냥 배열을 유지하고 푸는 것이 시간 면에서 더 효율적인 것 같다. 

 

 

 

 

 

 

 

 

참고 블로그


https://hikki.tistory.com/26