문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴.
function compressString(str) {
// count 가 3 이상이고, str[i] !== str[i+1] count와 str[i]
// count 를 세어줍니다
// 연속될경우 count + 1;
// 연속되지않을경우 count 3이상이면 카운트 붙이고 알파벳
// 연속되지않을경우 count 3미만이면 카운트 안붙이
let comp = '';
let count = 1;
if (str.length === 0) {
return '';
}
// 모든 문자를 count + string 형식으로 압축
for (i=1; i<=str.length; i++) {
if (str[i] === str[i-1]) {
count = count + 1;
} else if (str[i] !== str[i-1] || str[i] === undefined) {
comp = comp + count + str[i-1];
count = 1;
}
}
// for문을 돌면서 만약 count < 3 인경우, 해당숫자만큼 문자 입력
// '3w2g1o2p'
// 1인경우 패쓰.. 2인경우, 문자, str[i+1] 를 더해준다.
let result = '';
console.log(comp, result)
for (i=0; i<comp.length; i++) {
if (comp[i] === '1') {
result = result;
} else if (comp[i] === '2') {
result = result + comp[i+1];
} else {
result = result + comp[i]
}
}
return result;
}
저는 입력받은 문자열을 연속되는 숫자와 알파벳으로 압축시킨 문자열을 만들고, 연속된 숫자가 2인경우는 알파벳하나를 추가, 3이상인 경우는 연속되는 숫자를 붙이는 방식으로 문제를 해결하였습니다.
1개월 후 이 문제를 다시 풀었고 조금더 간략하게 코드를 짜게 되어 여기다가 올립니다.
function compressString(str) {
let count = 1;
let result = '';
for(i=0; i<str.length; i++) {
if (str[i] === str[i+1]) {
count += 1;
} else {
if (count >= 3) {
result += count + str[i];
count = 1;
} else {
for (j=1; j<=count; j++) {
result += str[i];
}
count = 1;
}
}
}
return result;
}