백준 1715 '카드 정렬하기' 자바

2023. 4. 25. 11:50·개발 공부/알고리즘

문제

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 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개의 숫자 카드 묶음의 각각의 크기가 주어질 때, 최소한 몇 번의 비교가 필요한지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 100,000) 이어서 N개의 줄에 걸쳐 숫자 카드 묶음의 각각의 크기가 주어진다. 숫자 카드 묶음의 크기는 1,000보다 작거나 같은 양의 정수이다.

출력

첫째 줄에 최소 비교 횟수를 출력한다.

접근 방법

- 먼저 선택된 카드 묶음이 가장 최소가 되어야 비교 횟수가 적어진다(우선순위 큐를 통해 자동 오름차순 정렬)

- 최악의 경우 100,000개의 카드 묶음이 형성되기 때문에 다 더하면 int의 최대 형을 넘을 수 있어 long형으로 선언

 

package codingtestStudy;

import java.util.PriorityQueue;
import java.util.Scanner;

public class P1715 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        PriorityQueue<Long> pq = new PriorityQueue<>();
        
        for(int i = 0; i < number; i++){
            pq.add(sc.nextLong());
        }
        //int 범위가 넘을 수 있으니 long으로
        long first;
        long second;
        long sum = 0;
            //우선순위 큐에 데이터가 1개 남을 때 까지
            while(pq.size() > 1){
                first = pq.poll();
                second = pq.poll();
                sum += first + second;
                pq.add(first + second);
            }


        System.out.println(sum);

    }
}

'개발 공부 > 알고리즘' 카테고리의 다른 글

백준 2252 '줄 세우기' 자바  (0) 2023.04.26
백준 1541 '잃어버린 괄호' 자바  (0) 2023.04.25
백준 11047 '동전 0' 자바  (0) 2023.04.25
프로그래머스 '네트워크' 자바  (0) 2023.04.18
프로그래머스 '게임 맵 최단거리' 자바  (0) 2023.04.18
'개발 공부/알고리즘' 카테고리의 다른 글
  • 백준 2252 '줄 세우기' 자바
  • 백준 1541 '잃어버린 괄호' 자바
  • 백준 11047 '동전 0' 자바
  • 프로그래머스 '네트워크' 자바
코딩숙
코딩숙
개발이라는 끝이 없는 바다 묵묵히 꾸준히 항해하기
  • 코딩숙
    코딩숙
    코딩숙
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • CS 공부 (17)
        • 클라우드 (3)
        • 네트워크 (3)
      • 개발 공부 (40)
        • 오류 해결 (4)
        • 알고리즘 (12)
        • Spring (3)
        • JPA (2)
        • TIL(오늘 내가 배운 것) (9)
        • 코드복습 (1)
        • 디자인 패턴 (1)
      • IT 관련 영상 메모 (1)
      • 데일리피드백 (0)
      • Tools (1)
      • Wishy (이력서 평가 프로젝트) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    innodb
    프로그래머스 네트워크 자바
    인프런
    isBefore()
    개발자
    appsmith
    user mode
    마이크로서비스
    데이터베이스 손상
    programmers #정수 내림차순으로 배치하기
    키 페어 분실
    HTTP BODY
    개발공부
    setter method
    http
    데이터 타입
    isAfter()
    JPA
    키 페어 변경
    도메인설계
    게임 맵 최단거리 자바
    데이터베이스 백업
    변수
    404 Not Found
    백준
    302 Found
    프로그래머스
    getter method
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
코딩숙
백준 1715 '카드 정렬하기' 자바
상단으로

티스토리툴바