prgms.42587 - 프린터
이 문제를 읽다보면 우선순위라는 글자를 보자마자 우선순위 큐를 사용해야겠다는 생각이 바로 들 것이다.
class Solution_42587 {
public int solution(int[] priorities, int location) {
int answer = 1;
PriorityQueue priorityQueue = new PriorityQueue(Collections.reverseOrder());
for (int task : priorities) {
priorityQueue.add(task);
System.out.println(priorityQueue);
}
while (!priorityQueue.isEmpty()) {
for (int i = 0; i < priorities.length; i++) {
if (priorities[i] == (int) priorityQueue.peek()) {
if (i == location) {
return answer;
}
priorityQueue.poll();
answer++;
}
}
}
return answer;
}
}
import java.util.LinkedList;
class Solution {
public int solution(int[] priorities, int location) {
if (priorities.length == 1) {
return 1;
}
int answer = 1;
LinkedList<Paper> papers = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
papers.addLast(new Paper(i, priorities[i]));
}
while (true) {
Paper paper = papers.removeFirst();
for (Paper item : papers) {
if (paper.priority < item.priority) {
papers.addLast(paper);
paper = null;
break;
}
}
if (paper != null) {
if (paper.item == location) {
return answer;
} else {
answer++;
}
}
}
}
class Paper {
int item;
int priority;
public Paper(int item, int priority) {
this.item = item;
this.priority = priority;
}
}
}
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;
}
}
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] priorities, int location) {
List<Integer> list = new ArrayList<>();
for (int priority : priorities) {
list.add(priority);
}
int turn = 1;
while (!list.isEmpty()) {
final Integer j = list.get(0);
if (list.stream().anyMatch(v -> j < v)) {
list.add(list.remove(0));
} else {
if (location == 0) {
return turn;
}
list.remove(0);
turn++;
}
if (location > 0) {
location--;
} else {
location = list.size() - 1;
}
}
throw new IllegalArgumentException();
}
}