문자열 압축
문제
설명
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단 반복횟수가 1인 경우 생략합니다.
입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력
첫 줄에 압축된 문자열을 출력한다.
예시 입력 1
KKHSSSSSSSE
예시 출력 1
K2HS7E
예시 입력 2
KSTTTSEEKFKKKDJJGG
예시 출력 2
KST3SE2KFK3DJ2G2
해결방법
문자열 + 해당 문자열을 “연속” 반복 횟수.
연속 이기 때문에, 다음 문자열이 현재와 같은지만 누적하여 보여줌. s.charAt(i) == s.charAt(i+1) ? cnt++;
문자열 + 해당 문자열이 “총” 몇 번 나왔는지?
총 몇번은 배열 전체 탐색하여 카운트 누적 후, 초기화
코드
import java.util.*;
class Main {
public String solution(String s) {
String answer = "";
s = s + " ";
int cnt = 1;
for (int i = 0; i < s.length() - 1; i++) {
// 다음 문자열이 같다? -> 횟수 증가
if (s.charAt(i) == s.charAt(i + 1)) cnt++;
else {
// 다르다? -> 문자열 저장 후, 카운트 저장
answer += s.charAt(i);
if (cnt > 1) answer += String.valueOf(cnt);
cnt = 1;
}
}
return answer;
}
public static void main(String[] args) {
Main.Main T = new Main.Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}