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();
  }
}