‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 프린터 | 프로그래머스>
1. 문제
- 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
- 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
- 내가 요청한 문서는 몇번째로 인쇄되는지 return 한다.
2. 풀이
Queue
를 이용한 문제 풀이
- 입력 순서대로 반환하면 되기 때문에 대기목록을
Queue
로 나타낸다. - 남아 있는 인쇄 작업의 중요도를 배열
arr
로 저장한다.
- 대기목록(
Queue
)에서 하나의 작업을poll()
하고,location--
을 한다. 그리고 남아 있는 인쇄 작업 중 자신보다 중요도가 높은 것이 있는지 확인한다.- 자신보다 중요도가 높은 것이 있을 경우 다시 대기목록(
Queue
)에add()
한다. 만약location==-1
일 경우location=que.size()-1
로 초기화한다. - 자신보다 중요도가 높은 것이 없을 경우 배열에서 해당 중요도의 개수를 하나 빼고(
arr[num]--
),answer++
을 하고,location==-1
일 경우 종료한다.
- 자신보다 중요도가 높은 것이 있을 경우 다시 대기목록(
3. 코드
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int[] arr = new int[10];
Queue<Integer> que = new LinkedList<>();
for (int priority : priorities) {
arr[priority]++;
que.add(priority);
}
while (!que.isEmpty()) {
int num = que.poll();
boolean flag = true;
location--;
for (int i=num+1; i<10; i++) {
if (arr[i] > 0) {
flag = false;
break;
}
}
if (flag) {
arr[num]--;
answer++;
if (location == -1)
break;
} else {
que.add(num);
if (location == -1)
location = que.size() - 1;
}
}
return answer;
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 더 맵게 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 기능개발 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] 주식가격 [JAVA(자바)] (0) | 2021.11.25 |
댓글