문자열 압축
알파벳 대문자의 문자열을 입력받아 같은 문자가 연속적으로 반복되면 반복되는 문자의 바로 오른쪽에 반복횟수를 표시하여 문자열을 압축하는 프로그램을 작성하시오. 단, 반복횟수가 1인 경우 생략한다.
입력 설명
문자열은 첫 번째 줄에 지정됩니다. 문자열의 길이는 100을 초과하지 않습니다.
종료 설명
압축된 문자열을 첫 번째 줄에 인쇄합니다.
입력 예
KKKHSSSSE
출력 예
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));
오류를 피하기 위해 문자열에 공백을 추가하여 if 문 s(i) === s(i+1)이 생성되었습니다. 이 부분이 풀리지 않아 for…of 문을 사용했는데 생각보다 해결이 쉬웠습니다.