이번에 풀어본 문제는
프로그래머스 최솟값 만들기 입니다.
import java.util.*;
class Solution
{
public int solution(int []A, int []B)
{
int answer = 0;
int size = A.length;
Queue<Integer> lowQ = new PriorityQueue<>();
Queue<Integer> maxQ = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < size; i++) {
lowQ.add(A[i]);
maxQ.add(B[i]);
}
while(!lowQ.isEmpty()) {
answer += (lowQ.poll() * maxQ.poll());
}
return answer;
}
}
한쪽 큐에서 가장 작은 수를 고르고, 반대쪽 큐에서는 가장 큰 값을 고르면 적절히 분배돼서 최솟값을 얻을 수 있을거라 생각했습니다. (확실하진 않습니다)
따라서 우선순위 큐를 활용하여, 오름차순, 내림차순 두 큐를 만들고 두 배열을 모두 담아 순차적으로 탐색하며 연산을 수행해주면 해결할 수 있습니다.