๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.1715 ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ ๋ฌธ์ œ ํ’€์ด

๐Ÿ“– ๋ฌธ์ œ

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

์ •๋ ฌ๋œ ๋‘ ๋ฌถ์Œ์˜ ์ˆซ์ž ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ๋ฌถ์Œ์˜ ์นด๋“œ์˜ ์ˆ˜๋ฅผ A, B๋ผ ํ•˜๋ฉด ๋ณดํ†ต ๋‘ ๋ฌถ์Œ์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์—๋Š” A+B ๋ฒˆ์˜ ๋น„๊ต๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฅผํ…Œ๋ฉด, 20์žฅ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ๊ณผ 30์žฅ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์„ ํ•ฉ์น˜๋ ค๋ฉด 50๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋งค์šฐ ๋งŽ์€ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์ด ์ฑ…์ƒ ์œ„์— ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋“ค์„ ๋‘ ๋ฌถ์Œ์”ฉ ๊ณจ๋ผ ์„œ๋กœ ํ•ฉ์ณ๋‚˜๊ฐ„๋‹ค๋ฉด, ๊ณ ๋ฅด๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ๋น„๊ต ํšŸ์ˆ˜๊ฐ€ ๋งค์šฐ ๋‹ฌ๋ผ์ง„๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 10์žฅ, 20์žฅ, 40์žฅ์˜ ๋ฌถ์Œ์ด ์žˆ๋‹ค๋ฉด 10์žฅ๊ณผ 20์žฅ์„ ํ•ฉ์นœ ๋’ค, ํ•ฉ์นœ 30์žฅ ๋ฌถ์Œ๊ณผ 40์žฅ์„ ํ•ฉ์นœ๋‹ค๋ฉด (10 + 20) + (30 + 40) = 100๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 10์žฅ๊ณผ 40์žฅ์„ ํ•ฉ์นœ ๋’ค, ํ•ฉ์นœ 50์žฅ ๋ฌถ์Œ๊ณผ 20์žฅ์„ ํ•ฉ์นœ๋‹ค๋ฉด (10 + 40) + (50 + 20) = 120 ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋œ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.

N๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์˜ ๊ฐ๊ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œํ•œ ๋ช‡ ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.1715 ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ ๋ฌธ์ œ ํ’€์ด์ž…๋‹ˆ๋‹ค. ์นด๋“œ ๋ญ‰์น˜๋“ค์„ ์ •๋ ฌํ•˜๋ ค ํ•˜๋Š”๋ฐ ์ตœ์†Œํ•œ์˜ ๋น„๊ต ํšŸ์ˆ˜๋กœ ์ •๋ ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋‚˜์™€ ์žˆ๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๊ฐ€์žฅ ์ ์€ ๋‘ ๋ฌถ์Œ์”ฉ ๊ณจ๋ผ ์„œ๋กœ ํ•ฉ์ณ๋‚˜๊ฐ€๋ฉด ์ตœ์†Œ ๋น„๊ต ํšŸ์ˆ˜๋กœ

์นด๋“œ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ์— ์นด๋“œ ๋ฌถ์Œ๋“ค์„ ๋„ฃ์–ด๋‘๊ณ 

๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์˜ ์นด๋“œ ๋ญ‰์น˜๋“ค๋ถ€ํ„ฐ ๋‘ ๋ฌถ์Œ์”ฉ ๊บผ๋‚ด ํ•ฉ์น˜๊ณ 

์•„์ง ๋น„๊ตํ•  ์นด๋“œ ๋ญ‰์น˜๋“ค์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด ํ•ฉ์นœ ์นด๋“œ ๋ญ‰์น˜๋ฅผ ๋‹ค์‹œ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ชจ๋“  ์นด๋“œ ๋ญ‰์น˜๋“ค์„ ๊บผ๋ƒˆ๋‹ค๋ฉด ๋” ์ด์ƒ ํ•ฉ์น  ์นด๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ

์ด๋•Œ๊นŒ์ง€ ๋น„๊ตํ•œ ํšŸ์ˆ˜๊ฐ€ ์ตœ์†Œ ๋น„๊ต ํšŸ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

package problem.greedy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class Main_1715 {
    static int N;
    static int[] cards;
    static PriorityQueue<Integer> priorityQueue;

    public static void main(String[] args) throws IOException {
        input();
        System.out.println(solve());
    }

    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        cards = new int[N];
        priorityQueue = new PriorityQueue<>();
        for (int i = 0; i < N; i++) {
            cards[i] = Integer.parseInt(br.readLine());
            priorityQueue.add(cards[i]);
        }
        br.close();
    }

    public static int solve() {
        int answer = 0;
        if (N == 1) {
            return 0;
        }
        while (!priorityQueue.isEmpty()) {
            int temp = priorityQueue.poll() + priorityQueue.poll();
            answer += temp;
            if (!priorityQueue.isEmpty()) {
                priorityQueue.add(temp);
            }
        }
        return answer;
    }
}

Written on February 2, 2021