프로그래머스 | LV.2 택배상자 - Stack & 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.2 택배상자 - Stack & 구현 문풀 (Java)

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

 

프로그래머스

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

programmers.co.kr

문제 설명


💚문제 접근 방식

문제를 읽어보면 보조 컨테이너 설명이 스택과 유사하다. 스택을 활용하여 처리를 해야 된다.

컨테이너는 순차적으로 들어올 건데, 정해진 순서의 값과 같은지 다른지에 따라 다르게 처리해야 한다. 맨 처음에 제출했을 때 4) 에서 처리해주는 while 문에 대한 처리 없이 매번 현재 box번호와 order 상의 번호 비교를 통해 처리를 해주었는데 이게 잘 안되었다ㅠㅠ

1) box 번호는 순차적으로 1번~size만큼 들어온다.

2) 현재 box 번호와 order상의 번호가 맞으면 answer++

3) 현재 box 번호와 order 상의 번호 다르면 스택 push

4) while 문 돌면서 stack 빌 때까지 stack의 현재값이 order의 값과 일치하는 동안 stack.pop처리하면서 진행

💚 제출 코드

import java.util.*;
class Solution {
    public int solution(int[] order) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        int idx = 0;
        for(int i=1; i<=order.length; i++){
            //순서가 맞으면 
            if(i != order[idx]){
               stack.push(i);
            }else{ //순서가 다르면 
               idx++;
                answer++;
            }
            
            while(!stack.isEmpty() && stack.peek() == order[idx]){
                stack.pop();
                idx++;
                answer++;
            }
        }
        
        return answer;
    }
}
728x90