728x90

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

풀이 - 나의 생각

원래 레일에는 1번 택배부터 n번 택배까지 순서대로 올라와 있다.

 

하지만 목적지에 따라

 

기사가 원하는 순서대로 바꾸기위해서

 

보조 컨테이너 벨트를(이하 보조 벨트) 사용할 수 있다.

 

이 보조 벨트에서 짐을 내리는 순서는

 

올려놓은 순서의 역순으로만 내릴 수 있다.

 

즉, 4번을 먼저 싣기위해

 

1, 2, 3 번을 보조 벨트에 올리면

 

3, 2, 1 순으로 꺼낼 수 있다.

 

이건 뭐다?

 

First In, Last Out => Stack 이다.

 

그래서 이 위의 설명처럼

 

order[i] 가 원래 짐과 순서가 다르면

 

그 순서를 맞추기 위해

 

원하는 짐의 순서(order[i])까지

 

스택에 넣어주면 된다.

 

그 후에

 

스택의 최상위 값(stack.peek())가 원하는 짐이 맞는지 체크만 해주면 된다.

 

코드

 

import java.util.*;
class Solution {
    public int solution(int[] order) {
        int answer = 0;
        int len = order.length;
        int box = order[0], num = 0;
        Stack<Integer> subRail = new Stack<>();
                
        for(int i = 0; i < len; i++){
            box = order[i];
            while(num+1 <= box){
                subRail.push(num+1);
                num++;
            }
            
            if(subRail.peek() == box){
                subRail.pop();
                answer++;
            }else break;
        }
        return answer;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

+ Recent posts