K-ary Huffman Encoding

문제 정보

문제

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

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

  1. N개의 각 문자에 K진법 문자열을 하나씩 배정해야 한다.
  2. 배정된 K진법 문자열들이 서로의 접두사(prefix)일 수 없다.

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

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

4개의 문자 각각에 서로의 접두사가 아닌 3진법 문자열을 할당했음을 확인해 볼 수 있다. 반면,

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

은 !에 013을 배정해서 첫 번째 조건을 만족하지 않고,

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

은 +이 #의 접두사이기 때문에 두 번째 조건을 만족하지 않는다.

Huffman 나라 언어 문자열이 하나 주어졌을 때, 이 문자열을 K진법으로 인코딩한 결과를 가장 짧게 만들면 길이가 어떻게 될까?
예를 들어 !!!@@@@#####++++++ 과 같이 !가 3번, @가 4번, #가 5번, +가 6번 문자열에 나타났다면, 첫 번째 표에서 제시한 인코딩을 적용한 경우 총 길이는 54가 된다 (3*3+4*3+5*3+6*3=54).

입력

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

각 테스트 케이스 첫 줄에는 두 정수 N (2 <= N <= 10000), K (2 <= K <= 10000)가 공백으로 구분되어 주어진다. N은 Huffman 나라의 문자의 수이고 K는 인코딩할 진법을 나타낸다. 다음 줄에는 각 문자가 문자열에 몇 번이나 나타나는지를 의미하는 N 개의 정수 Ci (0 <= Ci <= 100000) 가 공백으로 구분되어 주어진다.

출력

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

예제 입력

2
4 2
0 1 2 3
4 2
0 1 2 2

예제 출력

10
9

노트

  • 출제: zizavino
  • 검수: altertain

0개의 댓글이 있습니다.