본문 바로가기
Front-End/Algorithm

[알고리즘] 문자열 압축

by 민바이민 2021. 5. 22.

❓문자열 압축

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

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

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

입력예제 1 KKHSSSSSSSE

출력예제 1 K2HS7E

 

💡문제풀이

function solution(s) {
    let answer = "";
    let cnt = 1;
    s = s + " ";
    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));

 

1) answer를 문자열로 초기화 시켜 놓는다.

2) cnt(count)를 1로 초기화 시켜놓는다. 중복된 문자가 있으면 1씩 더해주어 출력을 하기 위해서.

3) 입력받은 문자열에 빈 칸(빈 문자열)을 추가시킨다. for문을 돌때 가장 마지막 비교대상을 생성시켜주기 위해서.

4) for문을 돌 때 조건식에 길이를 -1을 꼭 해주어야한다. 마지막은 빈칸이므로 그 앞까지만 돌아야하기 때문에.

5) 해당 인덱스의 문자와 해당 인덱스 +1 한 문자가 같다면 cnt를 1 더해준다

6) 문자가 같지않다면, answer에 인덱스에 해당하는 문자를 넣어주고 cnt의 값이 1보다 크면 (1이면 적어줄 필요가 없기 때문에) String으로 타입변환을 시켜준 뒤 answer에 추가시켜준다.

7) cnt를 1로 다시 초기화 시킨다.

댓글