문제 설명
접근 방법
우선 주어지는 문서들의 중요도가 중복될 수 있으므로 각각의 문서별 ID를 만들어 이를 Map으로 관리하도록 했습니다.
Map<Integer, Integer> documentsById = new HashMap<>();
for (int i = 0; i < priorities.length; i++) {
documentsById.put(i, priorities[i]);
}
이후 문서별 ID들을 Queue에 순서대로 넣은 후 각 문서별 ID를 나머지 문서별 ID들과 비교하여 자기 자신 보다 중요도가 더 높은 문서가 없다면 이를(문서 ID) List에 추가시키도록 했습니다.
Queue<Integer> documentQueue = new LinkedList<>(documentsById.keySet());
List<Integer> print = new ArrayList<>();
boolean flag = true;
while (!documentQueue.isEmpty()) {
int documentId = documentQueue.poll();
int document = documentsById.get(documentId);
for (int i : documentQueue) {
if (document < documentsById.get(i)) {
documentQueue.add(documentId);
flag = false;
break;
}
}
if (flag) {
print.add(documentId);
}
flag = true;
}
최종적으로 List 자료구조(print)에서 찾고자 하는 문서 위치 정보(location)을 통해서 몇 번째로 인쇄되는지를 반환합니다.
return print.indexOf(location) + 1;
전체 소스 코드
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
class Solution {
public int solution(int[] priorities, int location) {
Map<Integer, Integer> documentsById = new HashMap<>();
for (int i = 0; i < priorities.length; i++) {
documentsById.put(i, priorities[i]);
}
Queue<Integer> documentQueue = new LinkedList<>(documentsById.keySet());
List<Integer> print = new ArrayList<>();
boolean flag = true;
while (!documentQueue.isEmpty()) {
int documentId = documentQueue.poll();
int document = documentsById.get(documentId);
for (int i : documentQueue) {
if (document < documentsById.get(i)) {
documentQueue.add(documentId);
flag = false;
break;
}
}
if (flag) {
print.add(documentId);
}
flag = true;
}
return print.indexOf(location) + 1;
}
}
참고자료
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 - Java (0) | 2022.05.21 |
---|---|
[프로그래머스] 괄호 변환 - Java (0) | 2022.05.18 |
[프로그래머스] 빛의 경로 사이클 - Java (0) | 2022.05.16 |
[프로그래머스] 카펫 - Java (0) | 2022.05.11 |
[프로그래머스] 더 맵게 - Java (0) | 2022.05.10 |