[프로그래머스] 프린터
https://programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
목표 : 중요도가 순서대로 담긴 배열 priorities와 위치 location이 있을 때, 요청한 문서가 몇 번째로 인쇄되는 지 구하기 조건 : 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
프린터 대기목록에 중요도가 높은 문서를 먼저 인쇄하는 문제 큐 활용, Pair클래스는 배열의 위치와 값을 저장하기 위해 사용 먼저 priorities 배열에 위치와 값을 큐에 저장 1. 중요도가 가장 큰 숫자부터 인쇄하기 위해 먼저 배열을 정렬한다. 2. 반복문으로 배열의 맨 끝의(가장 큰 숫자) 값과 큐에서 뺀 값이 같은지 비교한다. 2-1. 비교한 숫자가 다르면 큐의 끝에 넣는다. 2-2. 비교한 숫자가 같으면 위치를 확인해준다. 위치가 같으면 횟수를 세주고 for문을 끝낸다. 위치가 다르면 횟수를 세주고 while문을 끝낸다. 다시 for문으로 돌아가서 다음 대기열을 확인한다.
주의 : 배열을 정렬해서 큐와 비교하는데 활용하기 for문이 차례로 돌기 위해 while문을 안에 넣어준다. break를 제대로 활용하기 |
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Pair> q = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
q.offer(new Pair(i, priorities[i]));
}
Arrays.sort(priorities);// 정렬
out: for (int i = priorities.length - 1; i >= 0; i--) {
while (true) {
Pair p = q.poll();// 큐에서 빼기
if (priorities[i] != p.value) {// 큐에서 뺀 값이 배열의 끝과 다르면
q.offer(p);// 큐에 다시 넣기
} else {//같으면
if (location == p.index) {//위치 확인
answer++;// 횟수세기
break out;
} else {// 다르면
answer++;
break;
}
}
}
}
return answer;
}
}
class Pair {
int index;
int value;
Pair(int index, int value) {
this.index = index;
this.value = value;
}
}