728x90
728x90
문제링크
https://programmers.co.kr/learn/courses/30/lessons/42587
문제풀이
👨🏻💻 핵심 스킬 👨🏻💻
Queue
우선순위가 가장 큰 문서부터 먼저 프린터를 하는 문제이다. 만약 우선순위가 대기열에 있던 프린터중에서 제일 높지 않다면 가장 뒤로 넘겨서 처리해주어야한다. 나는 이 문제를 해결하기 위해 Queue를 사용하였다.
문서를 프린터하기 위해 대기열에서 빼는 방법은 순서대로 빼주어야하며, 만약 우선순위가 가장 높지 않다면 맨 뒤로 넘겨주어야하기 때문이다.
먼저 입력으로 들어온 문서들의 우선순위를 계산하여 가장 높은 우선순위를 가지는 문서의 우선순위 값을 가져온다. 그리고 Queue를 돌면서 우선순위가 가장 높은 문서를 찾아서 출력을 해준다. 이 때 그 문서가 자신의 문서인지 확인해주고 우선순위가 가장 높은 문서 하나가 작업이 끝나기 때문에 다시 가장 큰 우선순위를 찾아주어야한다.
public int findMaxPrior(Deque<Word> deque) {
int max = 0;
for (int i = 0; i < deque.size(); i++) {
Word word = deque.removeFirst();
max = word.prior > max ? word.prior : max;
deque.addLast(word);
}
return max;
}
위 코드는 가장 큰 우선순위를 구해주는 코드이다.
자신의 문서가 출력될 때 까지 위 방법을 반복해서 수행해주고, 자신의 문서가 나왔다면 순서를 찾아서 리턴해주면 문제를 해결할 수 있다.
구현코드
import java.util.Deque;
import java.util.LinkedList;
public class Solution {
public int solution(int[] priorities, int location) {
Deque<Word> printer = new LinkedList<>();
int maxPrior = 0;
for (int i = 0; i < priorities.length; i++) {
maxPrior = maxPrior < priorities[i] ? priorities[i] : maxPrior;
printer.add(new Word(priorities[i], location == i));
}
int count = 0;
boolean isOk = false;
while(!isOk){
Word word = printer.removeFirst();
if(word.prior == maxPrior){
count++;
if(word.isMine)
isOk = true;
else
maxPrior = findMaxPrior(printer);
}
else{
printer.addLast(word);
}
}
return count;
}
public int findMaxPrior(Deque<Word> deque) {
int max = 0;
for (int i = 0; i < deque.size(); i++) {
Word word = deque.removeFirst();
max = word.prior > max ? word.prior : max;
deque.addLast(word);
}
return max;
}
public class Word {
int prior;
boolean isMine;
public Word(int p, boolean isMine) {
prior = p;
this.isMine = isMine;
}
}
}
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)
728x90
728x90
'CodingTest > Programmers' 카테고리의 다른 글
[PGM_42839] 소수 찾기 (0) | 2022.02.22 |
---|---|
[PGM_42746] 가장 큰 수 (java) (0) | 2022.02.21 |
[pgm_64065] 튜플 (java) (0) | 2022.02.15 |
[pgm_67257] 수식 최대화 (java) (0) | 2022.02.11 |
[PGM_81302] 거리두기 확인하기 (java) (0) | 2022.02.09 |