Friday, October 2, 2015

문자열압축

문제

문자열을 입력 받은 후, 같은 문자가 연속적으로 반복되는 경우 반복 횟수를 ()안에 넣어 문자열의 길이를 줄이는 압축하는 프로그램을 작성하려고 한다.
조건1. 같은 문자가 M번 이상 연속으로 반복된 때만 ()안에 반복 횟수를 넣는다.
조건2. 연속으로 반복되는 문자 뒤에 ()를 넣는다.

입력형식

입력의 첫줄에 M(2≤M≤10)이 들어온다.
그 다음 줄에 알파벳 대문자와 숫자로 구성된 문자열이 입력된다. 문자열의 길이는 100이하이다.

출력형식

압축한 문자열을 출력한다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int M = sc.nextInt();
  String str = sc.next();
  char[] strArray = str.toCharArray();
  int strArrayLength = strArray.length;
  
  char currentChar = strArray[0];
  
  String currentTempStr = String.valueOf(strArray[0]);
  
  for(int i=1; i<strArrayLength; i++){
   
   if(currentChar == strArray[i]){
    
    currentTempStr = currentTempStr + String.valueOf(strArray[i]);
    
   }else{
    
    if(currentTempStr.length() < M){
     System.out.print(currentTempStr);
     currentChar = strArray[i];
     currentTempStr = String.valueOf(strArray[i]);
    }else{
     System.out.print(currentChar+"("+currentTempStr.length()+")");
     currentChar = strArray[i];
     currentTempStr = String.valueOf(strArray[i]);
    }
    
   }
   
  }
  
  if(currentTempStr.length() < M){
   System.out.print(currentTempStr);
  }else{
   System.out.print(currentChar+"("+currentTempStr.length()+")");
  }
  
 }

}

No comments:

Post a Comment