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; } } }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]더 맵게 - 우선순위큐 (0) | 2023.02.25 |
---|---|
[프로그래머스]주식가격 - 구현 (0) | 2023.02.25 |
[프로그래머스]게임 맵 최단거리 - BFS (0) | 2023.02.07 |
[프로그래머스]타겟 넘버 - DFS (0) | 2023.02.07 |
[프로그래머스]등굣길 - DP (0) | 2023.02.07 |