출처: https://bumcrush.tistory.com/182 [맑음때때로 겨울]
반응형

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

 

프로그래머스

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

programmers.co.kr

 

package Programmers;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class 택배상자 {
    public static void main(String[] args){
        택배상자 T = new 택배상자();
        int[] order = {5, 4, 3, 2, 1};
        // 2 3
        T.solution(order);
    }

    public int solution(int[] order) {
        int answer = 0;
        int point = 0;
        Queue<Integer> qMain = new LinkedList<>();
        Stack<Integer> sSub = new Stack<>();

        //1 ~ order.length 까지의 수를 qMain 에다가 담는다.
        for (int i = 1; i <= order.length; i++) {
            qMain.offer(i);
        }

        //qMain 이 빌때까지 while 문을 돈다.
        while (!qMain.isEmpty()){
            int pos = order[point]; //지금담아야되는 물건번호
            int mBelt = qMain.poll();
            //현재 벨트위에있는 물건과 담아야되는 물건이 같으면
            if(mBelt == pos){
                point++;
                if(point >= order.length) break;
                pos = order[point];
            }else{ //다르면 보조벨트에다가 집어넣는다.
                sSub.push(mBelt);
            }
            //보조벨트에서 물건을 빼준다. 택배기사가 원하는거하고 다를때까지
            while (sSub.size() > 0 && sSub.peek() == pos){
                sSub.pop();
                point++;
                if(point >= order.length) break;
                pos = order[point];
            }
        }
        answer = point;
        return answer;
    }
}

1. 문제 

   - 문제 이해하는데 오래걸렸다. 주어진 배열 order는 택배기사가 넣고싶은 순서다.

   - 기본적으로 컨베이어 벨트에는 1 ~ order.length 까지 순서대로 깔려있고 1부터 빠져나온다. 

   - 1부터 빠져 나오는데 못담는건 보조벨트에다가 갖다 넣고, 보조벨트는 FILO (First In, Last Out) Stack 쓰라는거다.

   - 총 몇개의 상자를 실을수 있는지 result 구하는 문제

 

2. 풀이

  2.1 ) qMain 에다가 컨베이어 벨트를 만든다. 1부터 order.length 까지 차례로 que에다가 담는다.

  2.2 ) qMain이 비거나, point(택배기사가 원하는 물건의 위치) 가 order.length 이상이면 탈출

  2.3 ) 벨트위 물건과 담아야되는 물건이 같으면 point 증가시켜주고 원하는 물건(pos) 의 값 변경 해준다.

  2.4 ) 원하지 않는 물건이다 하면 sSub 보조벨트에다가 추가 해준다.

  2.5 ) 보조벨트에서 물건을 빼준다. 택배기사가 원하는물건과 다를때까지 

 

최종적으로 point 의 위치가 answer 가 된다.

 

※ 문제만 이해하면 답은 생각보다 간단함. 문제가 ㅈㄹ 맞음, 지문읽고 바로 이해할수 있는사람이 있는건가.

   예시가 좀더 있었으면 금방 풀었을것 같은데 

반응형

+ Recent posts