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

byeol·2023년 3월 25일
0

접근(틀린 문제)

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

이 문제는 "1231"인 경우 꺼내고 남겨진 것들에 또 "1231"을 찾는 문제이다.

처음에 이상한 접근을 생각했다.
포인터 두개 r,l을 통해서 같은 곳을 향하다가
1을 만나면 멈춰서서 r은 가만히 있고 l이 점차 4개의 자리를 나아가는 것이다. 나아가는데 그 값이 1231이라면 answer++을 하자

이렇게 접근했는데
위 방법은 너무 복잡했고 무엇보다 시간을 초과했기 때문에 다른 사람의 풀이를 참고했다.

이 문제는 Stack이라는 자료구조를 이용하는 문제이다.

따라서 Stack에 대한 메서드 정리가 필요하다

  • stack.size() : stack의 사이즈를 반환
  • stack.push(v) : v라는 값 넣기
  • stack.pop() : 맨 위에 있는 값 꺼내기
  • stack.get(v): v 위치의 값을 반환하는

과정

Stack의 사이즈나 4이상인 경우 검사를 하되
꼭대기로부터 -4인 값과부터 꼭대기까지의 값이
"1231"순서이면 answer++이다.


             if(st.size()>=4){
                 if(st.get(st.size()-4)==1
                   && st.get(st.size()-3)==2
                   && st.get(st.size()-2)==3
                   && st.get(st.size()-1)==1){
                
                   
                   answer++;
                   st.pop();st.pop();st.pop();st.pop();  
                 }
             }

풀이(java)

import java.util.*;
import java.io.*;


class Solution {
        
    
    public int solution(int[] ingredient) {
        
         Stack<Integer> st = new Stack<Integer>();
        
         int answer=0;
       
         for(int i=0;i<ingredient.length;i++){
            
             st.push(ingredient[i]);
             
             if(st.size()>=4){
                 if(st.get(st.size()-4)==1
                   && st.get(st.size()-3)==2
                   && st.get(st.size()-2)==3
                   && st.get(st.size()-1)==1){
                
                   
                   answer++;
                   st.pop();st.pop();st.pop();st.pop();  
                 }
             }            
         }        
        return answer;
        
    }
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글