문자열 압축

지창언·2022년 7월 26일

codingTest

목록 보기
21/29

Index

1.문제
2.내 코드
3.발전시킨 코드


문제

문자열을 입력받고, 같은 문자가 반복되는 경우 숫자를 표현하여 나타내어라.
(단, 반복횟수가 1인 경우 숫자 생략)
예시)
입력 : KKHSSSSSSSE
출력 : K2HS7E


내 코드

<script>
    function solution(s){
        let temp =s[0], count =1;
        let answer='';
        for(let i=1; i<s.length;i++){
            if(s[i]===temp){
                count++;
            }else{
                if(count ===1){
                    answer += temp;
                    temp =s[i];
                }else{
                    answer +=temp+String(count);
                    temp = s[i];
                    count = 1;
                }
            }
        }
        if(count ===1){
            answer += temp;
        }else{
            answer +=temp+String(count);
        }
        return answer;
    }
    console.log(solution('KKHSSSSSSSE'));
</script>

count : 현재 문자를 조우한 횟수를 따로 저장
temp : 현재 문자를 저장. 다음 문자와의 비교를 위함
초깃값 : 첫번째 문자를 temp에, 반복횟수 1을 count에 저장
반복문 1 : 두번째 문자부터 끝까지 탐색
조건문 1 : 이전의 문자(temp)와 현재 문자(s[i])가 같다면
조건문 1-2 : 현재 반복횟수가 1이라면
조건문 2 : 현재 반복횟수가 1이라면(마지막 문자를 넣기 위함)


발전시킨 코드

<script>
    function solution2(s){
        let answer ='';
        let cnt = 1;
        let temp = s +" ";
        for(let i=0; i<temp.length-1;i++){
            if(temp[i]===temp[i+1]) cnt++;
            else{
                answer +=temp[i];
                if(cnt>1)answer+=String(cnt);
                cnt =1;
            }
        }
        return answer;
    }
	console.log(solution2('KKHSSSSSSSE'));
</script>

현재 문자와 다음 문자를 비교해서 같다면 cnt 증가
다르다면 결과값에 문자를 더해주는 방법


profile
프론트엔드 개발자가 되고 싶은...

0개의 댓글