티스토리 뷰

728x90
반응형
문제 링크

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

문제 풀이

이 문제는 분류부터 큐로 되어있고, 프린터 관련 문제들은 대부분 대표적인 큐 문제죠.

 

저희는 각 문서들의 중요도를 배열로 입력받아 원하는 문서가 몇 번째로 출력되는지를 구해야 하는데요.

 

저는 다음과 같은 순서로 풀었습니다.

 

1. 각 문서의 중요도와, 이 문서가 원하는 문서인지를 가지는 변수를 가진 static class를 만들어 큐에 순서대로 넣었습니다.

2. 반복문을 돌리며 큐에서 문서를 꺼내고, 이 문서의 중요도가 큐 내에서 가장 높은지 비교합니다.

3-1. 아니라면, 큐에 다시 넣고 2번부터 반복합니다.

3-2-1. 맞다면, 꺼내서 출력한 개수를 저장하는 변수 answer를 +1 합니다.

3-2-2. 꺼낸 문서가 원하는 문서라면, 반복문을 종료합니다.

4. answer 변수를 return 합니다.

소스 코드
import java.util.*;

class Solution {
    static class Temp {
		int doc;
		boolean isPrint =false;
		public Temp(int doc, boolean isPrint) {
			super();
			this.doc = doc;
			this.isPrint = isPrint;
		}
	}
	
	public static int solution(int[] priorities, int location) {
        int answer = 0;
        
        LinkedList<Temp> printer = new LinkedList<Temp>();
        int c=0;
        for (int doc : priorities) 
			if(c++!=location) printer.addLast(new Temp(doc, false));
			else printer.add(new Temp(doc, true));
        
        while(!printer.isEmpty()) {
        	
        	Temp document = printer.poll();
        	if(!isMax(document.doc , printer)) {
        		printer.add(document);
        	}else {
        		answer++;
        		
        		if(document.isPrint) break; 
        	}
        }
        
        return answer;
    }
	
	public static boolean isMax(int doc, LinkedList<Temp> printer) {
		
		for (Temp temp : printer) 
			if(doc < temp.doc) return false;
		
		return true;
	}
}
728x90
반응형
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함