far

[JS 알고리즘] 문자열 압축 본문

알고리즘/알고리즘 베이스

[JS 알고리즘] 문자열 압축

Eater 2023. 3. 25. 02:40

문자열 압축

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단 반복횟수가 1인 경우 생략합니다.

 

입력설명
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

 

출력설명
첫 줄에 압축된 문자열을 출력한다.

 

입력예제
KKHSSSSSSSE

 

출력예제
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));

문자열에 공백을 추가하여 에러를 방지하는 방법을 사용해 s[i] === s[i+1]이라는 if문을 성립시켰다. 이 부분을 해결하지 못해 for...of문을 사용했던건데 생각보다 해결책이 간단했다.

Comments