반응형
문제분석
우선순위를 담은 배열과, 요청한문서의 위치가 입력값으로 주워집니다.
목표: 규칙에따라 인쇄작업을합니다. 그후, 요청한 문서가 몇번째로 출력이되는지 구해주세요.
규칙: 1. 대기순서대로 인쇄를합니다.
2.만약, 남은 대기열중에 우선순위가 더높은문서가 있으면, 맨뒤로 보냅니다.
꽤나, 로직은 간단합니다.
문제힌트가 스택/큐를 사용하라고하니, 사용해봅시다.
대기목록이 최대 100개가있으니, n^2으로 풀어도 괜찮을것같습니다.
대기순서대로 인쇄를해야하니, FIFO인 큐를 쓰고싶어집니다.
Queue <> = new LinkedList<>()
하지만, 저는 남은 대기열중에 우선순위가 더높은 문서를 찾기위해, get()메소드를 쓰고싶습니다.
그런데 LinkedList를 Queue 인터페이스로 업캐스팅을 해버려서 못씁니다.
이걸 해결해버리기위핸 간단하죠.
LinkedList<>= new LinkedList<>()로 선언해버리면 끝입니다.
LinkedList는 인터페이스 List, Queue,Deque를 참조하고있어서,
list의 기능, 큐의기능 모두 쓸수있습니다.
풀이 전략:
1.모든 원소를 LinkedList에 넣습니다.
2.LinkedList가 텅 비어잇을때까지 무한루프를돌립니다.
3.LinkedList의 첫원소가 나머지 우선순위보다 크면, 출력하고, 적으면 맨뒤로 보냅니다.
문제풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
LinkedList<int[]> print = new LinkedList<>();
for(int i=0;i<priorities.length;i++){
// 배열{프린트위치,우선순위} 저장
print.add(new int[]{i,priorities[i]});
}
int prt_cnt=0; //프린트순서
Loop: while(!print.isEmpty()){
for(int i=1;i<print.size();i++){
//우선도가 떨어지면 맨뒤로 빼기
if(print.peek()[1]<print.get(i)[1]){
print.add(print.poll());
continue Loop;
}
}
//인쇄를하였으니, 프린트순서 1증가
prt_cnt++;
if(print.peek()[0]==location){
answer=prt_cnt;
}
print.poll();
}
return answer;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,Java] Level2:소수 찾기 (0) | 2021.11.16 |
---|---|
[프로그래머스,Java] Level2:가장 큰 수 (0) | 2021.11.13 |
[프로그래머스,자바] Level2: 전화번호 목록 (2021년 업데이트) (0) | 2021.11.08 |
[프로그래머스,자바] Level2: 괄호 회전하기 (0) | 2021.11.07 |
[프로그래머스,자바] Level2: 튜플 (0) | 2021.11.06 |