알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시 오. 단 반복횟수가 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
문의 마지막에서 (i
가 s.length-1
인 경우) array에 존재하지 않는 요소 (s[i+1]
)을 참조하게 되는데, 정답 풀이의 경우는 s += " "
를 통해, 그리고 s.length
까지가 아닌 s.length - 1
까지를 반복하도록 하여 더욱 정확한 풀이가 가능하도록 하였다. 참고하도록 하자.