프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12910
이전에 했던 하샤드 수를 판별하는 과정의 발전된 문제이다.
<// Integer 타입으로 우선순위 큐 선언(낮은 숫자 순으로 우선순위 결정)
PriorityQueue<Integer> priorityQueue1 = new PriorityQueue<>();
// Integer 타입으로 우선순위 큐 선언(높은 숫자 순으로 우선순위 결정)
PriorityQueue<Integer> priorityQueue2 = new PriorityQueue<>(Collections.reverseOrder());
// String 타입으로 우선순위 큐 선언(낮은 숫자 순으로 우선순위 결정)
PriorityQueue<String> priorityQueue3 = new PriorityQueue<>();
// String 타입으로 우선순위 큐 선언(높은 숫자 순으로 우선순위 결정)
PriorityQueue<String> priorityQueue4 = new PriorityQueue<>(Collections.reverseOrder());
① PriorityQueue 선언과 값 채우기
Queue<Integer> list = new PriorityQueue<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor == 0) list.add(arr[i]); // 배열의 값을 divisor로 나누어 0으로 딱 나누어 질때만 저장
}
② 하샤드 수가 없을경우 -1 리턴
if(list.size() == 0) return new int[]{-1};
③ List -> Array
int[] answer = new int[list.size()]; // 배열의 크기를 list크기만큼 설정
int idx = 0;
while(!list.isEmpty()){ // 리스트가 비어있지 않을경우
answer[idx++] = list.poll(); // 배열에 리스트를 넣는다.
}
public class Harshad2 {
// PriorityQueue() 사용해서 푸는 법
// (Priority Queue는 기본큐의 기능인 FIFO를 가지면서 우선순위를 먼저 결정하고 우선순위가 높은 데이터가 먼저 나가는 자료구조이다)
public int[] solution2(int[] arr, int divisor){
Queue<Integer> list = new PriorityQueue<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor == 0) list.add(arr[i]);
}
if(list.size() == 0) return new int[]{-1};
// list를 Array로 바꾸기
int[] answer = new int[list.size()]; // 배열의 크기를 list크기만큼 설정
int idx = 0;
while(!list.isEmpty()){ // 리스트가 비어있지 않을경우
answer[idx++] = list.poll(); // 배열에 리스트를 넣는다.
}
return answer;
}
public static void main(String[] args) {
Harshad2 hs = new Harshad2();
int[] arr ={5,9,7,10};
int[] arr2 ={2,36,1,3};
int[] arr3 = {3,2,6};
System.out.println(Arrays.toString(hs.solution2(arr,5)));
System.out.println(Arrays.toString(hs.solution2(arr2,1)));
System.out.println(Arrays.toString(hs.solution2(arr3,10)));
}
}