https://programmers.co.kr/learn/courses/30/lessons/42587?language=java
풀이
인쇄물의 우선순위와 위치를 저장한 Print 클래스를 만들어 큐에 넣어준다.
우선순위가 들어있는 배열 priorities을 정렬하고, 현재 큐에 들어있는 인쇄물의 우선순위와 가장 큰 우선순위(priorities[j])와 비교한다.
- 현재 인쇄대기 문서의 우선순위가 가장 크다면 인쇄한다. ( j 와 answer 증가)
- 이때, 대기문서의 위치가 내가 인쇄를 요청한 문서(location)와 같다면 현재 인쇄순서(answer)를 retrun 해준다.
- 현재 인쇄대기 문서의 우선순위보다 더 큰 우선순위를 가진 문서가 있다면 맨 뒤로 보내준다.
import java.util.*;
class Solution {
static class Print{
int prior;
int location;
public Print(int prior, int l){
this.prior = prior;
this.location = l;
}
}
public int solution(int[] priorities, int location) {
int answer = 0; // 인쇄순서
Queue<Print> q = new LinkedList<>();
for(int i=0;i<priorities.length;i++){
q.offer(new Print(priorities[i],i));
}
Arrays.sort(priorities);
int j=priorities.length-1;
while(!q.isEmpty()){
// 현재 우선순위가 가장 크다면 인쇄
if(q.peek().prior >= priorities[j]) {
j--; answer++;
// 인쇄문서의 location이 location이라면 현재 인쇄순서 return
if(q.peek().location == location) return answer;
q.poll();
}
// 더 큰 우선순위가 있다면 맨 뒤로 보냄
else{
q.offer(q.poll());
}
}
return answer;
}
}
+ 다른사람풀이
location을 줄여나가 굳이 따로 위치저장을 하지 않고 풀어냈다.
내가 요청한 인쇄물의 위치가 될때까지 l--을 해주고 l이 0이된다면 break를 해준다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int l = location;
Queue<Integer> que = new LinkedList<Integer>();
for(int i : priorities){
que.add(i);
}
Arrays.sort(priorities);
int size = priorities.length-1;
while(!que.isEmpty()){
Integer i = que.poll();
if(i == priorities[size - answer]){
answer++;
l--;
if(l <0)
break;
}else{
que.add(i);
l--;
if(l<0)
l=que.size()-1;
}
}
return answer;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 Lv.2 : 더 맵게 (0) | 2022.03.13 |
---|---|
[Java] 프로그래머스 Lv.2 : 주식가격 (0) | 2022.03.11 |
[Java] 프로그래머스 Lv.2 : 위장 (0) | 2022.03.09 |
[Java] 프로그래머스 Lv.2 > 조이스틱 (0) | 2022.03.06 |
[Java] 프로그래머스 Lv2 > 삼각 달팽이 (0) | 2022.03.06 |