[프로그래머스]
프로그래머스 문자열 압축 C++
Hevton
2023. 10. 4. 19:05
반응형
카카오 블라인드 문제 중 하나이다. 한시간 정도 소요되었다.
처음에 map을 이용해서 카운팅한뒤에 누적합을 이용했는데
aabbaccc -> 3a2b3c 라는 결과가 나왔는데
aabbaccc -> 2a2ba3c 이 정답이다.
이 접근은 잘못된 접근이다.
이 문제는 주어진 대로의 구현으로만 진행해도 문제를 해결할 수 있다.
정답을 풀고 찾아보니 다른 사람들의 풀이와도 비슷했다.
참고로, 자를 단위의 최대는 주어진 문자열 길이의 /2 까지만 해주면 된다!
#include <string>
#include <vector>
#define MIN(a, b) ((a < b) ? a : b)
using namespace std;
int solution(string s) {
int len = s.length();
int answer = len;
// i : 자를 단위
for(int i = 1; i <= len / 2; i++) {
string last = "";
string sen = "";
int counter = 1;
for(int j = 0; j < len; j+=i) {
string t = s.substr(j, i);
if(last == t) {
counter++;
} else {
sen += last;
if(counter > 1) sen += to_string(counter);
counter = 1;
}
last = t;
}
sen += last;
if(counter > 1) sen += to_string(counter);
answer = MIN(answer, sen.length());
}
return answer;
}
반응형