https://programmers.co.kr/learn/courses/30/lessons/60057
function solution(s) {
let compressedStringLengthArr = [];
// i는 압축문자 단위가 s길이의 절반을 넘을수 없으므로 그만큼 반복한다.
for (let i = 0; i < s.length / 2; i++) {
let compressedStringLength = i + 1;
let repeatStringCount = 1;
let newString = "";
// j는 압축문자가 다음문자와 같은지 s에 대해서 전부 비교해 나가본다.
for (let j = 0; j < s.length; j += compressedStringLength) {
let currentString = s.substring(j, j + compressedStringLength);
let nextString = s.substring(
j + compressedStringLength,
j + 2 * compressedStringLength
);
//현재문자와 다음문자가 같다면 반복횟수 증가
if (currentString === nextString) {
repeatStringCount += 1;
// 같지 않다면 더이상 반복이 안되는 것이므로 새로운 문자열에 반복횟숫를 넣어서 반복문자열을 넣는다.
} else {
if (repeatStringCount !== 1) {
newString = newString + repeatStringCount + currentString;
// 반복이 안된다면 현재 문자열이 나머지 문자열이 되므로 기존 문자열에 붙여 넣는 것이다.
} else {
newString = newString + currentString;
}
//반복 횟수 초기화
repeatStringCount = 1;
}
}
// 압축완료된 문자열 케이스 길이 하나 추가
compressedStringLengthArr.push(newString.length);
}
var answer = Math.min(...compressedStringLengthArr);
return answer;
}
console.log(solution("aabbaccc"));
압축 압축문자열 단위를 한문자씩 앞에서부터 훑어가면서 s길이의 절반(아무리 반복되더라도 절반 이상이 반복될수는 없기때문에)까지 늘리면서 압축된 문자열을 모은다음 가장 짧은 길이의 문자열의 길이를 구하자
Math.min()
괄호 안의 요소들중 가장 작은 요소를 반환한다.array.substring(a, b)
array의 a번째 요소부터 b까지의 요소를 잘라내서 개별적인 배열을 만든다.