반응형

그리디 알고리즘 문제
카드가 겹쳐지며 계속 사용되는 구조이다. 따라서 합이 최소가 되기 위해서는 작은 카드들이 최대한 많이 쓰여야한다.
priority queue에 넣어서 카드의 숫자가 작은 순서대로 카드를 합치면 최소치가 나온다.
단 덧셈의 횟수가 상당히 많으므로 자료형을 잘 고려해야한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static PriorityQueue<Long> pq = new PriorityQueue<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long N = Integer.parseInt(st.nextToken());
long M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
pq.add(Long.valueOf(st.nextToken()));
}
for (int i = 0; i < M; i++) {
long a = pq.poll();
long b = pq.poll();
long temp = a + b;
pq.add(temp);
pq.add(temp);
}
long answer = 0;
while (!pq.isEmpty()) {
answer += pq.poll();
}
System.out.println(answer);
}
}반응형
'알고리즘' 카테고리의 다른 글
| [백준 2493 JAVA] 탑 (0) | 2024.06.06 |
|---|---|
| [백준 14595 JAVA] 동방 프로젝트 (Large) (0) | 2024.05.08 |
| [백준 6588 JAVA] 골드바흐의 추측 (0) | 2024.05.07 |
| [백준 16198 JAVA] 에너지 모으기 (0) | 2024.04.22 |
| [백준 13023 JAVA] ABCDE (0) | 2024.04.10 |