https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

푸는 방법입니다.

문제에서 제시된 방법 그대로 풀면 되는 구현문제입니다.

1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.

 

[step 1] Node(index, Priority)를 가진 ArrayList를 생성합니다.

[step 2] 인쇄 대기목록의 가장 앞에 있는 노드를 가지고옵니다. Arraylist.remove(0);

[step 3] 이제 arraylist의 모든 것을 돌며 [step 2] 에서 가장 앞에 있는 노드와 비교하여 우선순위가 더 높은 문서가 존재하면 다시 맨 뒤에 넣습니다. 이때 flag를 통해 더 높은 문서가 존재한다면 flag = true로 변경시킵니다.

[step 4] flag == false, 즉 우선순위가 더 높은 문서가 존재하지 않다면 거기서 출력처리를 합니다. 출력한 순서를 알기위해 answer += 1 이 출력했다는 의미를 나타냅니다.

[step 5]. 해당 값을 출력했을때  temp.index와 location의 값이 같다면 출력하고자하는 문서이므로 answer(지금까지 출력한 개수, 순서를 나타냄)을 출력합니다.

 

코드입니다.

import java.util.*;
class Solution {
// PriorityQueue<Node> pq = new PriorityQueue<>();
ArrayList<Node> list = new ArrayList<Node>();
public int solution(int[] priorities, int location) {
int answer = 0;
for(int i=0;i<priorities.length;i++){
list.add(new Node(i, priorities[i]));
}
while(list.size() > 0){
//1. 맨 앞의 것을 가져옵니다.
Node temp = list.remove(0);
boolean flag = false;
//2. 맨앞의 것보다 뒤에 더 큰 우선순위가 존재한다면, J를 대기목록의 가장 마지막에 넣습니다.
for(int i=0;i<list.size(); i++){
if(temp.priority < list.get(i).priority){
list.add(new Node(temp.index, temp.priority));
flag = true;
break;
}
}
//3. 그렇지 않다면 J를 인쇄합니다.
if(flag == false){
answer += 1;
if(temp.index == location) return answer;
}
}
return answer;
}
class Node{
int index;
int priority;
Node(int index, int priority){
this.index = index;
this.priority = priority;
}
}
}

+ Recent posts