[프로그래머스] 문자열 압축
문자열 압축
나의 풀이 (실패)
function solution(s) {
let temp = [];
for (let i = 1; i <= s.length; i++) {
temp.push(s.replace(new RegExp(`([a-z]{${i}})\\1+`, 'g'), x => x.length / i + x.substring(0, i)));
}
return temp.reduce((acc, cur) => (acc = cur.length < acc ? cur.length : acc), Number.MAX_SAFE_INTEGER);
}
- 정규식으로 해결하고 싶었지만 앞에서부터 동일한 갯수를 잘라나가야한다는 처리를 못해서 실패
- 너무 슬프지만 정규식에 변수 처리하려고 new RegExp 문자열 처리할 때 \1을 \1 해야한다는 것을 1시간 30분 삽질을 통해 알았다.
정답 코드
function solution(s) {
let answer = s.length;
for (let i = 1; i <= s.length / 2; i++) {
let cnt = 1;
let compressionStr = '';
let target = s.substring(0, i);
for (let j = i; j <= s.length; j += i) {
if (target === s.substring(j, j + i)) cnt++;
else {
if (cnt === 1) compressionStr += target;
else compressionStr += cnt + target;
target = s.substring(j, j + i);
cnt = 1;
}
}
if (cnt === 1) compressionStr += target;
else compressionStr += cnt + target;
answer = Math.min(answer, compressionStr.length);
}
return answer;
}
문제 기본 원리에 정말 충실한 해결법
괜히 정규식으로 풀겠다고 머리 썼다가 \ 에 걸려서 삽질 대장정을 했다 ㅠ