본문 바로가기
코딩테스트/프로그래머스

[프로그래머스/java] 프린터 - 큐 사용

by drCode 2021. 8. 4.
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

프로그래머스 레벨 2 프린터

 

위와 같은 문제로 백준에서 풀은 똑같은 프린터 큐 문제가 있는데

 

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
반응형

댓글