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

fsm12·2023년 7월 11일
0

프로그래머스

목록 보기
34/57
post-thumbnail

문제링크

문제 이해

[ 입력형태 / 조건 ]

ingredient
상수에게 전해지는 재료의 정보를 나타내는 정수 배열 | [2, 1, 1, 2, 3, 1, 2, 3, 1] | 1 ≤ ingredient의 길이 ≤ 1,000,000, ingredient의 원소는 1, 2, 3 중 하나의 값이며, 순서대로 빵, 야채, 고기를 의미

[ 문제 ]

상수가 포장하는 햄버거의 개수를 return

[ 풀이 ]

Stack에 현재 순서를 저장하고, 마지막 순서라면 스택에서 빼낸다



코드

> [실패] 1차 시도 : Stack 이용

  • 생각한 풀이 그대로 구현
import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        Stack<Integer> stack = new Stack<>();
        int p = 0, ans = 0;
        for(int ing : ingredient){
            if(ing == 1 && p == 3){
                for(int i=0; i<3; i++){
                    stack.pop();
                }
                ans+=1;
                p = stack.size()!=0?stack.peek():0;
                continue;
            }
            
            if(ing == p+1)
                p++;
            else if (ing != p)
                p=0;
            
            stack.add(p);
        }
        return ans;
    }
}



> [성공] 2차 시도 : Stack 이용

  • 직관적으로 4개를 꺼내보는 식으로 구현해봄
class Solution {
    public int solution(int[] ingredient) {
        int[] stack = new int[ingredient.length];
        int p = 0, ans = 0;
        for (int i : ingredient) {
            stack[p++] = i;
            if (3 < p && stack[p - 1] == 1 && stack[p - 2] == 3 && stack[p - 3] == 2 && stack[p - 4] == 1) {
                p -= 4;
                ans++;
            }
        }
        return ans;
    }
}



Tip : Stack 라이브러리보다 배열과 포인터변수로 구현하는 것이 훨씬 효율적이다. (덮어쓰기 가능)

0개의 댓글