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 | #include <string> #include <vector> #include <iostream> using namespace std; //제일 앞에서부터 일정한 길이로 잘라서 가장 짧게 압축되는 경우를 찾는다. int min( const int &a, const int &b) { if (a >= b) return b; return a; } int solution(string s) { int answer = s.size(); for ( int i = 1; i <s.size(); i++) { int cnt = 1; //기본 1 //최종 압축 된 후 문자열의 길이 (1 /2 등 압축된 개수까지 ) int len =i; string prev = s.substr(0, i); //길이만큼 비교한다. for ( int j= i; j < s.size(); j+=i) { string cur = s.substr(j, min(i, s.size())); if (cur == prev) cnt++; else { if (cnt > 1) { //이전에 같은 문자열이 포함되어있다면 //cnt가 1자리수이면 1, 2자리수이면 2 len += to_string(cnt).size(); //자리수를 더해준다. } len += cur.length(); cnt = 1; prev = cur; } } //len은 최종 압축 문자열의 길이 if (cnt > 1) len += to_string(cnt).size(); answer = min(answer, len); } return answer; } |
'Programmers > 프로그래머스' 카테고리의 다른 글
[Programmers] 땅따먹기 (0) | 2020.04.04 |
---|---|
[Programmers] 가장 긴 팰린드롬 (0) | 2020.04.03 |
[Programmers] N-Queen (0) | 2020.04.03 |
[Programmers] 방문 길이 (0) | 2020.04.03 |
[Programmers] 종이접기 (0) | 2020.04.03 |