ALGOSPOT STRJOIN 알고스팟 문자열 합치기
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 32 33 34 35 36 37 38 39 40 41 42 43 | #include<iostream> #include<vector> #include<string> #include<queue> #include<cstring> #include <algorithm> #include<set> using namespace std; //문자열들의 길이가 주어질 때 하나로 합치는 최소 비용을 반환한다. int concat(const vector<int> &lengths) { //최소 큐를 선언한다. priority_queue<int, vector<int>, greater<int> > pq; for (int i = 0; i < lengths.size(); i++) { pq.push(lengths[i]); } int ret = 0; //원소가 하나 이상 남은 동안 반복한다. while (pq.size() > 1) { //가장 짧은 문자열 두개를 찾아서 합치고 큐에 넣는다. int min1 = pq.top(); pq.pop(); int min2 = pq.top(); pq.pop(); pq.push(min1 + min2); ret +=(min1 + min2); } return ret; } int main(void) { int cases; cin >> cases; while (cases--) { int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; i++) cin >> arr[i]; cout << concat(arr) << endl; } return 0; } | cs |
문제 출처:https://algospot.com/judge/problem/read/STRJOIN
출현 확률이 문자열 길이로 바뀌었을 뿐 사실 허프만 코드알고리즘을 각색한 문제입니다.
'알고리즘 > 알고리즘 문제 해결전략(종만북)' 카테고리의 다른 글
백준 1914번 하노이 탑 (0) | 2019.09.03 |
---|---|
ALGOSPOT CHRISTMAS 알고스팟 크리스마스 인형 (3) | 2019.02.07 |
ALGOSPOT LUNCHBOX 알고스팟 도시락 데우기 (0) | 2019.01.23 |
ALGOSPOT MATCHORDER 알고스팟 출전 순서 정하기 (0) | 2019.01.23 |
ALGOSPOT PI 알고스팟 파이 (0) | 2019.01.23 |