문제
"aabbaccc" -> 2a2ba3c -> 7이 제일 짧음
제일 짧은 문자열의 길이 반환
코드
function solution(s) {
var answer = 0;
let unit = 0;
let min = 100000;
while(unit<=s.length){
unit++;
let split = [];
for(let i=0; i<s.length; i+=unit){
split.push(s.substr(i, unit));
}
let unitLen = findLen(split);
if(unitLen < min){
min = unitLen;
}
}
return min;
}
function findLen(split){
let compression = '';
let count = 1;
while(split.length > 0){
if(split[0] === split[1]){
count++;
split.shift();
} else {
if(count > 1){
compression += count;
count = 1;
}
compression += split.shift();
}
}
return compression.length;
}
후기
- 체감난이도 ★★
- O(n³) -> 효율성은 별로 안좋을 것 같음
- 1~n까지 압축하며 가장 짧은 문자열의 길이를 반환함
방법
- 1~n단위로 잘라 배열로 만듦
- 만들어진 배열을 findLen(문자열을 압축하는 함수)로 보냄
- split[0]과 split[1]을 비교하여 같으면 count++, 다르면 compression에 붙임