본문 바로가기
알고리즘

문자열 압축 [java]

by 완기 2021. 10. 24.
728x90
반응형

입력받은 문자열을 압축하는 알고리즘 (중복되는 개수만큼 우측에 숫자로 표현)

 

입력 예:

KKKSSERRHEEK

 

출력 예 :

K4S2E3R2H

 

package com.wesley;

public class Main {

   public static void main(String[] args) {
      System.out.println(shrots("KKKSSERRHEEK"));
   }

   public static String shrots(String input) {
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < input.length(); i++) {
         if (sb.toString().contains(String.valueOf(input.charAt(i)))) {
            continue;
         }
         int dup = 1;
         for (int j = i + 1; j < input.length(); j++) {
            if (input.charAt(i) == input.charAt(j)) {
               dup++;
            }
         }
         sb.append(input.charAt(i)).append(dup > 1 ? dup : "");
      }
      return sb.toString();
   }
}

조금 무식하게 풀었다.

순차 탐색을 하고도 그전에 탐색했던 문자를 또 탐색하니 효율성 측면에선 좋지 않지만, 일단 요구 사항을 해결하긴 했다.

 

더 좋은 방법을 위해서 더 공부해야겠다.

 

일단 문자열에 이미 탐색된 문자열이면 continue로 건너뛰고, 그게 아니면 중복 개수(dup)를 중복이 발견되면 증감한다.

 

그리고 1은 생략이므로 dup에서 1보다 크면 삼항 연산자를 통해 숫자를 문자로 파싱 해서 append 한다.

 

300x250

 

728x90
728x90

댓글