CODE KATA #22

YoungToMaturity·2021년 2월 11일
0

CODE KATA 🧗‍♂️

목록 보기
22/37
post-thumbnail

문자열 압축

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

나의 풀이

            function solution(s){
                let answer="";
                for (i=0; i<s.length; i++) {
                    if(answer.indexOf(s[i])===-1) {
                        answer+=s[i];
                        let count = 1;
                        while(s[i]===s[i+1]) {
                            count++;
                            i++;
                        }
                        if(count!==1) answer+=count;
                    }
                }
                return answer;
            }
            
            let str="KKHSSSSSSSE";
            console.log(solution(str));

정답 풀이

            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));

참고할 점

처음 풀이를 생각해볼때엔, indexOf()를 응용하여 풀이를 진행하려고 했으나, 해당 케이스는 풀이가 가능했으나 "KKHSSSSSEK"와 같은 테스트 케이스는 통과하기 어렵다고 판단했다. 하지만, 정답 풀이와 나의 풀이는 둘 다 같은 결과를 출력하지만, 나의 풀이의 경우, for문의 마지막에서 (is.length-1인 경우) array에 존재하지 않는 요소 (s[i+1])을 참조하게 되는데, 정답 풀이의 경우는 s += " "를 통해, 그리고 s.length까지가 아닌 s.length - 1까지를 반복하도록 하여 더욱 정확한 풀이가 가능하도록 하였다. 참고하도록 하자.

profile
iOS Developer

0개의 댓글