반응형
카카오 블라인드 문제 중 하나이다. 한시간 정도 소요되었다.
처음에 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;
}
반응형
'[프로그래머스]' 카테고리의 다른 글
프로그래머스 거리두기 확인하기 (0) | 2023.10.09 |
---|---|
프로그래머스 후보키 C++ (1) | 2023.10.05 |
프로그래머스 순위 검색 C++ (0) | 2023.10.02 |
프로그래머스 행렬 테두리 회전하기 C++ (0) | 2023.09.20 |
프로그래머스 양궁대회 C++ (0) | 2023.09.19 |