프로그래머스 LV.2 프린터
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
2. 문제 해결에 대한 아이디어
1. 인쇄 대기목록의 앞 뒤에서 작업이 일어나므로 Deque를 사용했다. Deque<Work> q = new ArrayDeque<>();
2. Work 클래스를 사용했으며, 요청 순서와 우선 순위로 구성하였다.
3. 먼저 int[] priorities에 있는 값들을 꺼내와 q에 넣었다.
4. q가 빌 떄까지 아래의 로직을 수행한다.
. q의 맨 앞에 있는 work를 꺼낸다
. Iterator<Work> iter 를 사용하여 q에 있는 값들 중 꺼낸 work보다 우선 순위가 높은 work가 있는지 확인한다.
. 우선 순위가 높은 work가 있다면, 꺼낸 work를 맨 뒤에 넣는다.
. 끝까지 돌았는데 if(!iter.hasNext()) 우선 순위가 높은 work 가 없으면 현재 꺼낸 work를 출력한다.
. 꺼낸 work와 location을 비교하여 동일하면 반복을 멈춘다.
. 다르면 ++answer를 한다.
3. 코드
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
public class Solution {
static class Work{
int no;
int priority;
public Work(int no, int priority) {
super();
this.no = no;
this.priority = priority;
}
}
static Deque<Work> q = new ArrayDeque<>();
public int solution(int[] priorities, int location) {
int answer = 1;
for(int i = 0 ; i < priorities.length ; i++) {
q.add(new Work(i, priorities[i]));
}
while(!q.isEmpty()) {
Work now = q.poll();
Iterator<Work> iter = q.iterator();
while(iter.hasNext()) {
if(iter.next().priority > now.priority) {
q.addLast(now);
break;
}
}
if(!iter.hasNext()) {
if(now.no == location)
break;
else
++answer;
}
}
return answer;
}
}
4. 채점 결과
5. 느낀 점
1. 평소에 Iterator를 잘 안 쓰는데, 이 기회에 쓰게 되었다.
2. Iterator<콜렉션에 담긴 형태> iter = 콜렉션.iterator();
3. Iterator를 통해 객체에 접근하고 싶다면, Iterator.hasNext().XXX
'알고리즘 > 프로그래머스 LV.2' 카테고리의 다른 글
프로그래머스 LV.2 전화번호 목록 (0) | 2022.01.13 |
---|---|
프로그래머스 LV.2 오픈채팅방 (0) | 2022.01.12 |
프로그래머스 LV.2 카카오프렌즈 컬러링북 (1) | 2022.01.11 |
프로그래머스 LV.2 게임 맵 최단거리 (0) | 2022.01.10 |
프로그래머스 LV.2 위장 (0) | 2021.09.24 |
댓글