코딩테스트/프로그래머스
[프로그래머스/java] 프린터 - 큐 사용
drCode
2021. 8. 4. 15:49
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
위와 같은 문제로 백준에서 풀은 똑같은 프린터 큐 문제가 있는데
https://drcode-devblog.tistory.com/256
[백준/java] 1966번: 프린터 큐
https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다
drcode-devblog.tistory.com
문제 풀이 방식이 똑같으나
백준이랑 제출방식의 차이가 다르므로 프로그래머스 버전을 게시합니다.
반응형
package printer;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
public class Printer {
public static void main(String[] args) {
Solution s = new Solution();
int[] arr1 = {2,1,3,2};
System.out.println(s.solution(arr1, 2));
int[] arr2 = {1,1,9,1,1,1};
System.out.println(s.solution(arr2, 0));
}
}
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Integer[] copy = new Integer[priorities.length];
for (int i = 0; i < copy.length; i++) {
copy[i] = priorities[i];
}
Queue<Paper> q = new LinkedList<Paper>();
for (int i = 0; i < copy.length; i++) {
q.add(new Paper(copy[i], i == location));
}
Arrays.sort(copy, Collections.reverseOrder());
int k = 0;
while(k < copy.length) {
Paper p = q.peek();
int max = copy[k];
if(p.priority == max) {
answer++;
if(p.isRight) break;
k++;
q.poll();
} else {
q.add(q.poll());
}
}
return answer;
}
}
class Paper {
int priority;
boolean isRight;
public Paper() {}
public Paper(int priority, boolean isRight) {
this.priority = priority;
this.isRight = isRight;
}
}
728x90
반응형