그래서 더 큰 수가 있다면 다시 queue의 뒤에 넣고 그렇지 않으면 pop해서 프린터 순서 목록에 추가합니다
이렇게 하면 프린터 순서를 쉽게 결정할 수 있습니다!!
프로그래머스 프린터 문제 자바 풀이 코드는 아래와 같습니다!!
import java.util.Queue;
import java.util.LinkedList;
class Print{
int priority;
int index;
Print(int priority, int index){
this.priority = priority;
this.index = index;
}
}
class Solution{
static Queue<Print> queue;
public int solution(int[] priorities, int location) {
int[] order = new int[priorities.length];
queue = new LinkedList<>();
int answer = 0;
// queue에 넣기
for (int i = 0; i < priorities.length; i++) {
Print print = new Print(priorities[i], i);
queue.offer(print);
}
int j=0;
while(!queue.isEmpty()){
Print print = queue.poll();
int priority = print.priority;
// 큰 수가 있나 찾아보기
if(check(priority))
queue.offer(print);
else{
order[j] = print.index;
j++;
}
}
for (int i = 0; i < order.length; i++) {
if(order[i] == location){
answer = i + 1;
break;
}
}
return answer;
}
public static boolean check(int num){
boolean flag = false;
// list를 array로 변환
Print[] list = queue.toArray(new Print[queue.size()]);
for (int i = 0; i < list.length; i++) {
if(list[i].priority > num){
flag = true;
break;
}
}
return flag;
}
}
여기서 중요한 것은 queue를 사용한다는 생각(물론 queue를 안쓰고 arraylist를 써도 가능)과
list를 array로 변환하는 부분이라고 생각해요
queue에서 인덱스를 참조하며 비교하려고 했는데 그 부분이 없더라구요
그래서 list로 변환해서 참조하도록 하였어요
아니면 똑 같은 queue를 복사해두고 할 수 도 있는데 그게 그거일 것 같다고 생각했어요