우보천리 개발

[BJ] 1715 카드 정렬하기 Java 본문

알고리즘/백준

[BJ] 1715 카드 정렬하기 Java

밥은답 2023. 1. 25. 18:18
반응형

백준 1715 카드 정렬하기 

문제

https://www.acmicpc.net/problem/1715

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net

 

아이디어

  • 문제의 예시에도 나와있듯이 최소한으로 비교하기 위해서는 가장 작은 값끼리 먼저 더해야한다
  • 즉 10, 20, 40이면 (10+20) + (30+40) 을 해야함
  • 계속해서 작은 값을 먼저 더해야되기 때문에 PriorityQueue 우선순위큐를 사용하면 된다

코드

package baekjoon;
import java.util.*;

class BJ1715 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        // 가장 낮은 숫자들을 먼저 더해야하기 때문에 우선순위 큐를 사용해서
        // 낮은값들을 먼저 뽑아서 더하는 방식으로 간다
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        for (int i=0; i<n; i++) {
            int num = sc.nextInt();
            pq.offer(num); // 우선순위큐 이기 때문에 poll()할때 작은 값이 먼저 나옴
        }

        int answer = 0;

        // 큐에 숫자가 두개 있어야 더 할 수 있음
        while (pq.size() > 1) {
            int a = pq.poll();
            int b = pq.poll();
            answer += a+b;
            pq.offer(answer); // 더한값을 다시 넣어줘야 최대 횟수 가능
            // 10+20 = 30 했다면, 30 + 40 해야되기 때문에 30넣어줌
        }
        System.out.println(answer);
    }
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BJ] 1325 효율적인 해킹 Java  (0) 2023.01.26
[BJ] 18352 특정 거리의 도시 찾기 Java  (0) 2023.01.26
[BJ] 1744 수 묶기 Java  (0) 2023.01.26
[BJ] 1931 회의실 배정 Java  (0) 2023.01.25
[BJ] 1541 잃어버린 괄호 Java  (0) 2023.01.25
Comments