- 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 풀이
import java.util.*;
class Solution {
//문제를 제대로 읽지 않아 컨테이너 벨트는 1~n순으로 나온다를 파악하지 못한 채로
//접근해서 시간을 많이 소모했습니다.
//보조컨테이너벨트는 가장 마지막에 보관한 상자를 먼저 꺼낸다 == Stack 사용합니다.
public int solution(int[] order) {
int answer = 0; //정답을 담아줄 answer입니다.
int len = order.length; //order의 크기를 미리 담아 사용합니다.
Stack<Integer> st = new Stack<>(); //보조 컨테이너 벨트 역할을 할 Stack을 만들어줍니다.
int idx = 0; //현재 꺼내야할 택배 번호를 확인하기 위한 idx입니다.
//이제 for문을 통해 1번부터 n번까지 오는 택배상자를 표현합니다.
for(int i=1; i<=len; i++){
//만약 현재 택배상자가 기사님이 원하는 순번의 택배상자일 경우입니다.
if(i == order[idx]){
idx++; //다음으로 원하는 택배상자를 확인해야 하므로 idx를 증가시켜줍니다.
answer++; //트럭에 실린 택배상자의 수를 증가시켜줍니다.
//이번 택배상자가 트럭에 실림으로서 보조컨테이너의 택배상자가
//실릴 수 있는 가능성이 생겼으므로, 확인해줍니다.
//보조 컨테이너 벨트가 비어있는 경우를 대비해 !st.isEmpty() 조건도 추가해줍니다.
while(!st.isEmpty() && st.peek()==order[idx]){
//while문에 들어왔다는 것은 보조 컨테이너 벨트의 첫번째 상자가
//택배기사님이 원하는 택배상자 였다는 의미입니다.
//보조 컨테이너 벨트에서 택배상자를 꺼내주고,
st.pop();
//다음 순번의 택배상자 번호를 확인하기 위해 idx 증가,
idx++;
//트럭에 실린 택배상자 수를 증가시켜줍니다.
answer++;
}
//이번 택배상자 번호가 꺼내야 하는 택배상자 번호와 일치하지 않는다면,
} else {
//보조 컨테이너 벨트에 넣어줍니다.
st.add(i);
}
}
//답을 반환합니다.
return answer;
}
}
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드, java (0) | 2025.02.08 |
---|---|
[프로그래머스] 숫자 변환하기, java (0) | 2025.02.05 |
[프로그래머스] 주식가격, java (0) | 2025.02.03 |
[프로그래머스] 더 맵게, java (0) | 2025.02.03 |
[프로그래머스] 모음사전, java (0) | 2025.01.31 |