본문 바로가기
짱구 굴리기 (Q) -

[프로그래머스] 프린터

by skwzz 2019. 4. 2.

출처 : https://programmers.co.kr/learn/courses/30/lessons/42587?language=java

 

큐를 사용해 푸는 문제입니다

 

 

public class PrinterQueue {
	public static void main(String[] args) throws IOException{
		int[] arr = new int[] {1, 1, 9, 1, 1, 1};
		int location = 0;
		
		PrinterQueue pq = new PrinterQueue();
		int result = pq.solution(arr, location);
		System.out.print("RESULT:"+result);
	}
	public int solution(int[] arr, int location) {
		int answer = 1;
		
		Queue<Node> queue = new LinkedList<Node>();
		for(int i=0; i<arr.length; i++) {
			queue.add(new Node(i, arr[i]));
		}
		
		while(!queue.isEmpty()) {
			Node current = queue.poll();
			
			Iterator it = queue.iterator();
			boolean check = true;
			
			while(it.hasNext()) {
				Node other = (Node)it.next();
				if(current.priority < other.priority) {
					check = false;
					break;
				}
			}
			
			if(check) { // 우선순위가 제일 높을 경우
				//찾고자 하는 경우
				if(current.idx == location) {
					return answer;
				}else { //찾는 노드가 아님
					answer++;
				}
			}else { //우선순위가 낮을경우 그냥 뒤로 붙임
				queue.add(current);
			}
		}
		
		return answer;
	}
	
	public class Node{
		int idx;
		int priority;
		
		public Node(int idx, int priority){
			this.idx = idx;
			this.priority = priority;
		}
	}
}

 

큐에 인덱스와 우선순위를 가진 노드객체를 넣고

큐의 맨 앞을 빼오고 나머지를 이터레이터로 돌리면서 큐에 남은 노드의 우선순위를 확인합니다. (check 변수로 저장)

그리고 주석 적힌대로

현재 노드가 우선순위가 제일 높을경우

1. 현재 내가 찾을려고 했던 노드일 경우 리턴

2. 내가 찾을 노드가 아닌 경우 answer를 1 증가 시킨 후 다시 반복문

현재 노드가 우선순위가 밀릴 경우 

현재 노드를 다시 큐에 붙여주는 식으로 했습니다

 

 

 

'짱구 굴리기 (Q) - ' 카테고리의 다른 글

[백준 1100] 하얀 칸  (0) 2019.04.03
[백준 1193] 분수찾기  (0) 2019.04.02
[백준 11866] 조세퍼스 문제 0  (0) 2019.04.01
[백준 1065] 한수  (0) 2019.01.29
[백준 1920] 수 찾기  (0) 2019.01.25