문제 : 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다.
제한사항 :
- 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.
- 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.
- location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.
풀이 :
package com.company;
import java.lang.reflect.Array;
import java.util.*;
public class Printer {
static int[] priorities = {2,1,3,2};
static int location = 2;
static int[] priorities2 = {1, 1, 9, 1, 1, 1};
static int location2 = 0;
public static void main(String[] args) {
System.out.println(solution(priorities, location));
System.out.println(solution(priorities2, location2));
}
static class myPrint
{
int document;
int priorities;
public myPrint(int docu, int prio)
{
this.document = docu;
this.priorities = prio;
}
}
public static int solution(int[] priorities, int location) {
int answer = 0;
Queue<myPrint> q = new LinkedList<>();
for (int i =0; i<priorities.length; i++)
q.offer(new myPrint(i, priorities[i]));
while (q.size() > 0)
{
Boolean flag = false;
for (myPrint print: q) {
if (q.peek().priorities < print.priorities) {
flag = true;
}
}
if(flag)
{
q.offer(q.poll());
}
else
{
if (q.poll().document == location)
{
answer = priorities.length - q.size();
}
}
}
return answer;
}
}
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 전화번호 목록 - 프로그래머스 (0) | 2020.11.16 |
---|---|
[JAVA] 완주하지 못한 선수 - 프로그래머스 (0) | 2020.11.13 |
[JAVA] 스킬트리 - 프로그래머 (0) | 2020.10.23 |
[JAVA] 124 나라의 숫자 - 프로그래머스 (0) | 2020.10.22 |
[JAVA] 소수찾기 - 프로그래머스 (0) | 2020.10.21 |