Recent Posts
소소한 개발이야기
[Programmers 문제풀이 JAVA] Level 2 프린터 본문
📄 프린터
🔗 문제 풀러가기
Queue를 이용해 문제를 풀 수 있습니다. 문제는 다음과 같이 접근할 수 있습니다.
먼저 인쇄 대기목록의 index와 해당 인쇄물의 priority를 저장하는 PrintItem Class를 정의해줍니다.
🌱 PrintItem Class
class PrintItem {
int index;
int priority;
public PrintItem(int index, int priority) {
this.index = index;
this.priority = priority;
}
}
그리고 주어진 인쇄 대기목록을 모두 Queue에 넣습니다. 이 후 Queue의 가장 첫 번째 원소를 대기상태로 뺀 다음 Queue에 남은 인쇄 목록 중 대기상태의 priority값 보다 큰 원소들의 개수를 세어줍니다. 만약 그 개수가 0이라면 현재 대기상태인 목록은 출력 대상이 되며, 개수가 0보다 크다면 프린트 Queue의 가장 마지막으로 다시 들어가게 됩니다.
🌱 Solution 함수
public int solution(int[] priorities, int location) {
Queue<PrintItem> printQueue = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
printQueue.add(new PrintItem(i, priorities[i]));
}
return calcPrintTurn(printQueue, location);
}
🌱 프린트 순서를 계산하는 함수
private int calcPrintTurn(Queue<PrintItem> printQueue, int targetLocation) {
int result = 0;
while (true) {
PrintItem temp = printQueue.poll();
int cnt = (int) printQueue.stream().filter(item -> item.priority > temp.priority).count();
if (cnt == 0) {
result++;
} else {
printQueue.add(temp);
}
if (cnt == 0 && temp.index == targetLocation) {
break;
}
}
return result;
}
'Programmers' 카테고리의 다른 글
[Programmers 문제풀이 JAVA] Level 2 소수 찾기 (0) | 2019.05.28 |
---|---|
[Programmers 문제풀이 JAVA] Level 2 탑 (0) | 2019.05.27 |
[Programmers 문제풀이 JAVA] Level 2 주식가격 (0) | 2019.05.26 |
[Programmers 문제풀이 JAVA] Level 3 방문 길이 (0) | 2019.05.11 |
[Programmers 문제풀이 JAVA] Level 2 스킬 트리 (0) | 2019.05.10 |
Comments