[java] 프로그래머스 - 프린터
업데이트:
문제
프로그래머스-프린터
인쇄 대기목록에 있는 문서들 중 주어진 location번째 문서의 인쇄 순서를 구하는 문제.
- 조건
가장 앞에있는 문서를 꺼낸 후 인쇄 대기목록에서 우선순위가 높은 문서가 대기중이라면 대기열 마지막으로 보낸다.
우선순위가 높은 문서가 없다면 인쇄한다.
풀이
인쇄작업의 중요도는 1~9로 표현되어있으므로 처음 대기목록에 넣을 때 갯수를 넣어줬다.
중요도 1인 문서 2개, 3인 문서 1개 ..
대기열에서 우선순위 높은 문서를 검색할 때
현재뽑은 문서의 중요도보다 큰 문서들의 개수만 보면 되니까!
소스코드
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[] priorities, int location) {
Queue<Integer> idx = new LinkedList<>();
Queue<Integer> pr = new LinkedList<>();
int chk[] = new int[10];
for (int i = 0; i < priorities.length; i++) {
idx.add(i);
pr.add(priorities[i]);
chk[priorities[i]]++;
}
int cnt = 0;
while (!idx.isEmpty()) {
int curr = pr.poll(); // 현재 뽑은 문서의 우선순위
int index = idx.poll(); // 현재 뽑은 문서의 인덱스
boolean highPR = false;
for (int i = curr+1; i < 10; i++) {
if (chk[i]>0) {
highPR = true;
break;
}
}
if (highPR) { // 높은 문서가 존재해? 다시넣어
pr.add(curr);
idx.add(index);
continue;
}
cnt++; // 프린트하는 경우 인쇄횟수 추가하고 우선순위 개수차감
chk[curr]--;
if (index == location) {
return cnt;
}
}
return cnt;
}
}
다른사람의 코드
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int l = location;
Queue<Integer> que = new LinkedList<Integer>();
for(int i : priorities){
que.add(i);
}
Arrays.sort(priorities);
int size = priorities.length-1;
while(!que.isEmpty()){
Integer i = que.poll();
if(i == priorities[size - answer]){
answer++;
l--;
if(l <0)
break;
}else{
que.add(i);
l--;
if(l<0)
l=que.size()-1;
}
}
return answer;
}
}
댓글남기기