(JS 알고리즘) 문자열 압축

문자열 압축

알파벳 대문자의 문자열을 입력받아 같은 문자가 연속적으로 반복되면 반복되는 문자의 바로 오른쪽에 반복횟수를 표시하여 문자열을 압축하는 프로그램을 작성하시오. 단, 반복횟수가 1인 경우 생략한다.

입력 설명
문자열은 첫 번째 줄에 지정됩니다. 문자열의 길이는 100을 초과하지 않습니다.

종료 설명
압축된 문자열을 첫 번째 줄에 인쇄합니다.

입력 예
KKKHSSSSE

출력 예
K2HS7E

// 나의 풀이

function solution(s){
    let answer = "";
    let num = 1;
    let prev = "";

    for (let i of s) {
        if (prev === i) {
            num++
        } else {
            if (num !== 1) {
                answer += num
            }
            answer += i
            num = 1
        }
        prev = i
    }
    if (num !== 1) {
        answer += num
    }

    return answer;
}

let str="KKHSSSSSSSE";
console.log(solution(str));

if 문을 가능한 한 적게 사용하고 싶었지만 다른 것이 생각나지 않았습니다.

// 강의의 풀이

function solution(s){
    let answer="";
    let cnt=1;
    s=s+" "; // (i+1)시 마지막 문자 에러 방지
    for(let i=0; i<s.length-1; i++){
        if(s(i)===s(i+1)) cnt++;
        else{
            answer+=s(i);
            if(cnt>1) answer+=String(cnt);
            cnt=1;
        }
    }
    return answer;
}

let str="KKHSSSSSSSE";
console.log(solution(str));

오류를 피하기 위해 문자열에 공백을 추가하여 if 문 s(i) === s(i+1)이 생성되었습니다. 이 부분이 풀리지 않아 for…of 문을 사용했는데 생각보다 해결이 쉬웠습니다.