알고리즘(Algorithm)

[Algorithm] 문자열 압축

XDXDX 2023. 7. 25. 16:27

1. 문제

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축

단, 반복횟수가 1인 경우 생략합니다.

2. 예시

KKHSSSSSSSE => K2HS7E

3. 코드

import java.util.Scanner;

/**문자열압축
 * 알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복
 * ->문자바로 오른쪽에 횟수표기
 * ->반복횟수가 1인 경우 생략
 * ex) KKHSSSSSSSE -> K2HS7E
 * */
public class Case11 {
    public String solution(String str) {
        StringBuilder ans = new StringBuilder();
        str = str.toUpperCase() + " ";
        int cnt = 1; // 카운트셀때
        for (int i = 0; i < str.length() - 1; i++) {
            if (str.charAt(i) == str.charAt(i + 1)) { // k == k cnt =2
                cnt++;
                //System.out.println("비교문자 : " + str.charAt(i) + " " + str.charAt(i + 1) + " cnt : " + cnt);
            } else { // (1) k != h
                ans.append(str.charAt(i)); // ans = k2
                if (cnt > 1) {
                    ans.append(cnt);
                }
                cnt = 1;
                //System.out.println(ans);
            }
        }
        return ans.toString();
    }

    public static void main(String[] args) {
        Case11 case11 = new Case11();
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        System.out.println(case11.solution(str));
    }
}

4. 마무리

'알고리즘(Algorithm)' 카테고리의 다른 글

[Algorithm] 가장 짧은 문자의 거리  (0) 2023.07.24
[Algorithm] 숫자만 추출  (0) 2023.07.19
[Algorithm] 팰린드롬  (0) 2023.05.30
[Algorithm] 회문 문자열  (0) 2023.04.03
[Algorithm] 중복문자제거  (0) 2023.03.24