❓문자열 압축
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시 오. 단 반복횟수가 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로 다시 초기화 시킨다.
'Front-End > Algorithm' 카테고리의 다른 글
[알고리즘] 가장 짧은 문자거리 구하기 (0) | 2021.05.22 |
---|---|
[알고리즘] 숫자만 추출하기 (0) | 2021.05.20 |
[알고리즘] 유효한 팰린드롬 (0) | 2021.05.20 |
[알고리즘] 회문 문자열 (0) | 2021.05.18 |
[알고리즘] flag변수를 이용한 봉우리 개수 구하기 (0) | 2021.05.18 |
댓글