이번에 풀어본 문제는
백준 1715번 카드 정렬하기 입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Queue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
pq.add(Integer.parseInt(br.readLine()));
}
int answer = 0;
//값이 2개 이상이면 진행
while (pq.size() > 1) {
int fst = pq.poll();
int sec = pq.poll();
int sum = fst + sec;
answer += sum;
pq.add(sum);
}
System.out.print(answer);
}
}
N개의 카드 묶음이 주어질 때, 각 묶음들을 서로 합쳐나가려고 합니다.
이 과정에서 가장 최소한의 비용으로 카드 묶음들을 합칠 수 있는 경우를 구하는 문제입니다.
항상 가장 최솟값을 선택하여 합치는 것이 최소 결과에 도달한다고 생각하여 우선순위 큐를 활용해서 해결해 보았습니다.
입력값을 모두 우선순위 큐에 담고, 매번 값을 두개 꺼내 합쳐서 answer 변수에 누적해주고, 합친 값은 다시 큐에 담아주면 해결할 수 있습니다.
큐에서 두개 연속 꺼내는게 뭔가 굉장히 찜찜하고 이상하게 풀었다고 생각해서, 다른 풀이를 확인해 봤는데, 다들 비슷하게 푼 것 같습니다 ㅋㅋㅋㅋ 이상하지 않았던걸로.....