문자열 압축 알고리즘 - 자바 .with 주의사항

728x90

문제

문자열 압축입니다.

QQQLLLLEEWQ 라는 문자가 들어오면

Q3L4E2WQ 라는 결과 값이 나와야 합니다.


소스 코드 

import java.util.*;

class Main {  
  public static void main(String args[]) { 
    Scanner sc = new Scanner(System.in);
    String s = sc.next() + " ";
    String result = "";
    int cnt = 1;
    for(int i=0; i<s.length()-1; i++){
      if(s.charAt(i) == s.charAt(i+1)){
        cnt++;
      }else{
        result += s.charAt(i);
        if(cnt > 1){
          result += Integer.toString(cnt);
        }
        cnt = 1;
      }
        
    }
    System.out.println(result);
  } 
}

 

 


해설

문자열 길이 만큼 반복합니다. 

문자의 개수를 카운트 하기 위한 변수 cnt를 선언합니다. 

cnt는 1로 초기화 합니다.

i번째 문자와 i+1번째 문자와 비교해서 같으면 cnt를 1 더해줍니다.

다르다면 결과를 출력할 String 변수에 해당 문자를 더해주고 cnt가 1보다 크면 cnt를 String으로 바꾸어 더해줍니다.

그 후 cnt 를 1로 다시 초기화 시킵니다.


주의사항

i+1를 검사하기 때문에 마지막 문자를 검사할 때 에러가 발생합니다.

그러니 마지막 문자 검사를 위해 처음 문자열에 " " 빈 문자를 더해줍니다.

그러고 반복문에서 length() 까지가 아닌 length()-1까지만 반복합니다.

반응형