멍두의 개발새발

[프로그래머스] 햄버거 만들기 in Java 본문

Algorithm/Programmers

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

멍두 2024. 6. 27. 23:14
반응형

📍 문제

https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📍 문제설명

햄버거는 1 2 3 1 의 stack이 쌓이면 만들 수 있다.

이 때 1 2 2 3 3 1 이면 햄버거를 만들 수 없다.

무조건 1 2 3 1 로 쌓여야지만 만들 수 있다.

 

📍 코드

1. 들어오는 값을 stack에 쌓는다

2. stack 사이즈가 4이상이고, 제일 위에 값이 1이면 햄버거를 만들 수 있는지 검사한다.

   4 이상인게 핵심! 빈 stack을 검사하지 않도록 해야한다

3. 1 3 2 1 로 저장되어 있는지 확인하고 만약 그렇다면 stack에서 4개를 모두 꺼낸다.

 

import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        for(int i = 0; i < ingredient.length; i++){
            stack.push(ingredient[i]);
            
            //stack 사이즈가 4이상이고 제일 위에 값이 1이면 검사해보기
            if(stack.size() >= 4 && stack.peek() == 1){
                //stack이 1321이면 햄버거 만들기 가능
                if(stack.get(stack.size()-1) == 1 && 
                   stack.get(stack.size()-2) == 3 &&
                  stack.get(stack.size()-3) == 2 && 
                   stack.get(stack.size()-4) == 1){
                    stack.pop();
                    stack.pop(); 
                    stack.pop();
                    stack.pop();
                    
                    answer++;
                }
            }
        }
        
        return answer;
    }
}

 

📍 틀린 이유

stack인데 1 1 2 2 3 3 1 1 이런 식으로 들어와도 만들 수 있다고 오해하여 stack을 앞의 값을 검사해서 앞에 1 이 있으면 2를 넣고 2가 있으면 3을 넣고 이런 식으로 stack을 쌓았다.

 

이 문제는 재료가 쌓이고 꺼내는 것 이므로 들어오는 대로 다 스택에 쌓고 꺼내보는 식으로 풀어야한다.

 

항상 느끼는 거지만 나는 쉽게 풀려고 하다가 오히려 더 코드를 복잡하게 짜게되는 경향이 있는 것 같다

직관적이게 풀 수 있도록 노력하자

 

📍 기억할 것

stack.get(인덱스) :  list처럼 꺼내볼 수 있다.

 

반응형