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

ywwwon01·2023년 6월 16일
0

알고리즘

목록 보기
13/13

📖 문제

🔗 프로그래머스 :: 햄버거 만들기 :: Lv. 1

✏️ 풀이

👾 생각의 전개..

Stack을 쓰면 될 것같은 문제!

-> 빵-야채-고기-빵 -> 이 순서를 갖추게 되었다는 것을 어떻게 체크할까?

-> 현재 전달받은 재료들의 개수가 4개 이상이고, 마지막에 받은 재료가 빵이면? 그 때 체크

-> 위에서부터 pop 해보면서, 위의 재료 4개의 순서가 빵-고기-야채-빵 인지 확인해보자(Stack은 LIFO 니까 순서를 반대로)

-> 재료 4개의 순서를 확인해 봤는데, 만약에 순서가 빵-고기-야채-빵이 아니면?

-> 안 쓰인 재료.. -> 다시 되돌려 놓아야 하니까

-> 임시 스택 tmp를 두고 관리를 해보자

import java.util.*;

/*
stack의 size가 4 이상이고, top에 있는 애가 빵(1) 일 때
연속으로 4번 pop 했을 때 순서가 1321 이 되면 -> 햄버거 1개 count
아니면? 다시 집어넣고, 다음 재료 받아서 stack에 push 반복
*/

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        
        Stack<Integer> s = new Stack<>();
//         빵, 야채, 고기, 빵
//         1: 빵, 2: 야채, 3: 고기
//         1 2 3 1
        for (int i = 0; i < ingredient.length; i++) {
            s.push(ingredient[i]);
            
            if (s.size() >= 4 && s.peek() == 1) {
                Stack<Integer> tmp = new Stack<>();
                String sequence = "";
                for (int j = 0; j < 4; j++) {
                    sequence += Integer.toString(s.peek());
                    tmp.push(s.peek());
                    s.pop();
                }
                
                if (sequence.equals("1321")) {
                    answer++;
                }
                else {
                    for (int j = 0; j < 4; j++) {
                        s.push(tmp.peek()); // 돌려놓기
                        tmp.pop();
                    }
                }
            }
        }
        
        return answer;
    }
}

🛠️ 리뷰

처음에 코드를 작성하면서, 아무 생각 없이 if문의 조건을.. sequence == "1321" 이런식으로 줬었습니다. ㅋㅋㅋㅠㅠ

하지만! 금방 알아채고 수정했으니까!! 다음에는 이런 실수를 하지 않도록 주의 해야겠습니다.

이상입니다.

profile
생각의 전개를 공유합니다.

0개의 댓글