프로그래머스 - [프린터] 42587
2022. 3. 13. 18:48ㆍ프로그래머스
문제 링크
코딩테스트 연습 - 프린터 | 프로그래머스 (programmers.co.kr)
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.
문제 설명에서부터 Queue 를 사용해야 될 것이라는 느낌이 듭니다.
가장 앞에 있는 문서를 꺼내고, 중요도가 가장 높은게 아니라면 뒤에 push 합니다.
자바에서 Queue 는 LinkedList 로 구현합니다.
인자로 int 배열 priorities, 찾으려는 위치인 location 이 넘겨집니다.
큐에 인덱스 값 0 ~ (i-1) 을 넣고 앞에서부터 꺼내는데, priorities 배열의 모든 원소들과 값을 비교하면서 크기가 더 큰 값이 하나라도 존재라면 값을 빼서 맨 뒤로 넣어줍니다.
이미 뺀 값의 인덱스는 priorities에서 그 인덱스의 값을 0 으로 지정해줍니다.
소스코드
public int solution(int[] priorities, int location) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
Queue<Integer> q= new LinkedList<>();
int length = priorities.length;
for(int i=0;i<length;i++){
q.add(i); // 큐에 인덱스값 삽입
}
while(!q.isEmpty()){
boolean flag = false;
int front = q.peek();
for(int i=0;i<length;i++){
if(i==front) continue;
if(priorities[i] > priorities[front]){
q.poll();
q.add(front);
flag = true;
break;
}
}
if(!flag) {
q.poll();
list.add(front);
priorities[front] = 0;
}
}
for(int i=0;i<list.size();i++){
if(list.get(i)==location)
return i+1;
}
return answer;
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - [주식 가격] 42584 (0) | 2022.03.13 |
---|---|
프로그래머스 - [다리를 지나는 트럭] 42583 (0) | 2022.03.13 |
프로그래머스 - [기능개발] 42586 (0) | 2022.03.12 |
프로그래머스 - [베스트앨범] 42579 (0) | 2022.02.20 |
[전화번호 목록] - 42577 (0) | 2022.02.18 |