[백준 1715] 카드 정렬하기(Java)

최민길(Gale)·2023년 1월 8일
1

알고리즘

목록 보기
4/172

문제 링크 : https://www.acmicpc.net/problem/1715

이 문제는 우선순위 큐를 이용하면 쉽게 풀 수 있습니다. 문제 특성상 최소의 비교를 하기 위해선 작은 수들끼리의 합을 통한 비교가 되어야 합니다. 이 때 우선 순위 큐에 데이터가 추가되면 자동적으로 정렬이 되기 때문에 정렬로 인한 시간을 단축할 수 있습니다.

다음은 코드입니다.

import java.nio.Buffer;
import java.util.*;
import java.io.*;

public class Main{

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());

        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i=0;i<N;i++){
            st = new StringTokenizer(br.readLine());
            pq.add(Integer.parseInt(st.nextToken()));
        }

        int res = 0;
        while(!pq.isEmpty()){
            // 첫 번째 수 뽑기
            int first = pq.poll();

            // 만약 수가 1개밖에 없었다면 그대로 종료
            if(pq.isEmpty()) break;

            // 두 번째 수 뽑기
            int second = pq.poll();

            // 두 수의 합을 다시 pq에 추가
            // 합을 결과값에 더하기
            pq.add(first+second);
            res += first+second;
        }

        System.out.println(res);
    }
}```

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글