티스토리 뷰

 

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

 

15903번: 카드 합체 놀이

첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,

www.acmicpc.net

 

 

 

작은 수끼리 합하여야 최종 합이 최소가 되므로

카드 숫자가 오름차순으로 정렬되도록 하기 위하여 PriorityQueue 사용

 

 

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String line = br.readLine();
        int cards = Integer.valueOf(line.split(" ")[0]);            //카드 갯수
        int count = Integer.valueOf(line.split(" ")[1]);            //합 횟수

        //카드 수 arr
        long[] card = new long[cards];

        line = br.readLine();
        card = Arrays.stream(line.split(" ")).mapToLong(Long::parseLong).toArray();

        PriorityQueue<Long> q = new PriorityQueue<>();
        for (int i = 0; i < card.length; i++) {
            q.add(card[i]);
        }

        Long a, b;
        for (int i = 0; i < count; i++) {
            a = q.remove();
            b = q.remove();

            a += b;
            q.add(a);
            q.add(a);
        }

        int size = q.size();
        long sum = 0;
        for (int i = 0; i < size; i++) {
            sum += q.remove();
        }

        System.out.println(sum);
    }
}

 

주의) 

합체 시 숫자가 Int 범위에 해당하는지

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

[programmers] 소수 찾기  (0) 2021.12.04
[백준 1202] 보석 도둑  (0) 2021.11.30
[programmers] H-Index  (0) 2021.11.24
[programmers] Heap - 더 맵게  (0) 2021.11.16
[programmers] 해시 - 전화번호 목록  (0) 2021.11.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함