현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return하도록 solution함수를 작성하는 문제이다.
현재 대기목록의 위치(location)와 우선순위(proority)를 담을 Document 클래스를 생성하여 사용하였다. 대기목록(queue)과 인쇄되는 목록(list)를 생성하여, 인쇄되는 문서의 location이 내가 인쇄를 요청한 문서의 location과 같을 때까지 규칙에 따라 큐에 넣고 삭제하는 작업을 반복한다.
import java.util.ArrayList;
import java.util.LinkedList;
class Solution {
class Document {
int location;
int priority;
public Document(int location, int priority) {
super();
this.location = location;
this.priority = priority;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
LinkedList<Document> queue = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
Document doc = new Document(i, priorities[i]);
queue.add(doc);
}
ArrayList<Document> list = new ArrayList<>();
int target = -1;
while(target != location) {
Document first = queue.getFirst(); // 대기목록의 가장 앞에 있는 문서
boolean nhp = true; // 중요도가 높은 문서 존재 여부
for (int i = 1; i < queue.size(); i++) {
if (first.priority < queue.get(i).priority) {
nhp = false;
queue.remove();
queue.add(first);
break;
}
}
if (nhp) {
list.add(first);
queue.remove();
target = first.location;
}
}
answer = list.size();
return answer;
}
}