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 가 된다.
※ 문제만 이해하면 답은 생각보다 간단함. 문제가 ㅈㄹ 맞음, 지문읽고 바로 이해할수 있는사람이 있는건가.
예시가 좀더 있었으면 금방 풀었을것 같은데
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 혼자놀기의달인 Lv2 JAVA (0) | 2023.05.12 |
---|---|
[알고리즘] 프로그래머스 - 연속 부분 수열 합의개수 Lv2 Java (0) | 2023.05.12 |
[알고리즘] 프로그래머스 - 롤케이크자르기 LV.2 java (1) | 2023.05.10 |
[알고리즘] 프로그래머스 - 콜라문제 LV.1 JAVA (0) | 2023.05.10 |
[알고리즘] 프로그래머스 - 과일장수 Lv1 Java (0) | 2023.05.10 |