만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

K진 Huffman 인코딩

면접 대비

시간 제한1초메모리 제한1024 MB

요약
문자 N개의 출현 횟수가 주어질 때, K진 접두사 없는 부호로 인코딩한 전체 길이의 최솟값을 구합니다.
난이도

보통10점 중 5점

유형
그리디, 힙
정답자
아직 제출이 없습니다

문제

Huffman 나라의 문자는 NN개로 이루어져 있다. 0과 1로 된 이진 인코딩이 발달한 대한민국과 달리, Huffman 나라에서는 00부터 K−1K - 1까지의 숫자로 이루어진 KK진법 인코딩이 발달했다.

우리는 Huffman 나라의 언어를 KK진법으로 인코딩하려 한다. 이때 다음 조건을 만족해야 한다.

  1. NN개의 각 문자에 KK진법 문자열을 하나씩 배정해야 한다.
  2. 배정된 KK진법 문자열 중 어떤 것도 다른 문자열의 접두사가 될 수 없다.

예를 들어 아래 표는 !, @, #, + 네 문자를 33진법으로 올바르게 인코딩한 것이다.

문자인코딩
!012
@120
#201
+210

각 문자열이 서로의 접두사가 아니므로 두 조건을 모두 만족한다. 다음 표는 !에 013을 배정했으므로 첫 번째 조건을 만족하지 않는다.

문자인코딩
!013
@120
#201
+210

그다음 표는 +이 #의 접두사이므로 두 번째 조건을 만족하지 않는다.

문자인코딩
!012
@120
#201
+20

Huffman 나라의 언어로 된 문자열이 하나 주어졌을 때, 이 문자열을 KK진법으로 인코딩한 결과의 최소 길이는 얼마인가? 예를 들어 문자열 !!!@@@@#####++++++에서 !가 3번, @가 4번, #가 5번, +가 6번 나타난다고 하자. 위의 첫 번째 인코딩 표를 적용하면 전체 길이는 5454가 된다 (3×3+4×3+5×3+6×3=543 \times 3+4\times 3+5\times 3+6\times 3 = 54).

입력

입력은 TT개의 테스트 케이스로 구성된다. 첫 줄에는 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 두 정수 NN (2≤N≤10 0002 \le N \le 10\,000)과 KK (2≤K≤10 0002 \le K \le 10\,000)가 공백으로 구분되어 주어진다. NN은 Huffman 나라의 문자 수이고, KK는 인코딩할 진법이다. 다음 줄에는 각 문자가 문자열에 나타나는 횟수를 뜻하는 NN개의 정수 CiC_i (0≤Ci≤100 0000 \le C_i \le 100\,000)가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스마다 한 줄에 하나씩, 주어진 문자열의 가능한 최소 KK진법 인코딩 길이를 출력한다.

힌트

두 테스트 케이스 모두 다음과 같이 배정하면 최소 길이를 얻을 수 있다.

문자인코딩
30
210
1110
0111

첫 번째 케이스는 3+4+3=103 + 4 + 3 = 10 길이로 문자열을 표현할 수 있다. 두 번째 케이스는 3+4+2=93 + 4 + 2 = 9 길이로 표현할 수 있다.

예제1

  1. 예제 1

    입력
    2
    4 2
    0 1 2 3
    4 2
    0 1 2 2
    
    예상 출력
    10
    9