햄버거 만들기 (자바)

김재현·2023년 12월 5일
0

알고리즘 풀이

목록 보기
43/89

문제

정답 코드

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;

       StringBuilder result = new StringBuilder();
        for (int i = 0; i < ingredient.length; i++) {
            result.append(ingredient[i]);

            if (result.length()>3) {
                if (result.charAt(result.length()-1)=='1'
                && result.charAt(result.length()-2)=='3'
                && result.charAt(result.length()-3)=='2'
                && result.charAt(result.length()-4)=='1'
                ) {
                    answer++;
                    result = new StringBuilder(result.substring(0,result.length()-4));
                }
            }
        }

        return answer;
    }
}

처음엔 contains와 replace로 해당 문자열을 제거해줬는데, 오답이 되었다.
왜냐하면 내가 문제를 잘못 이해했던 것이다. 햄버거 재료가 쌓이면 그때 위에서만 제거하는 것인데!
그래서 맨 마지막부터 4번째까지 무엇이 오는지 확인하고 그만큼 제거해주는 방식으로 다시 문제를 풀었다.

다른 사람 풀이

class Solution {
    public int solution(int[] ingredient) {
        int[] stack = new int[ingredient.length];
        int sp = 0;
        int answer = 0;
        for (int i : ingredient) {
            stack[sp++] = i;
            if (sp >= 4 && stack[sp - 1] == 1
                && stack[sp - 2] == 3
                && stack[sp - 3] == 2
                && stack[sp - 4] == 1) {
                sp -= 4;
                answer++;
            }
        }
        return answer;
    }
}

배열을 String으로 바꾸지 않고 바로 풀었다!
sp로 재료의 개수를, stack 배열로 해당 재료가 무엇인지 확인하는 것이다.
for문을 돌리며 삭제를 하지 않고 덮어씌운다는 생각을 하다니! 많이 배워야겠다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글