알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는
문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
첫 줄에 압축된 문자열을 출력한다.
KKHSSSSSSSE
K2HS7E
KSTTTSEEKFKKKDJJGG
KST3SE2KFK3DJ2G2
import java.util.*;
public class Main {
public String solution(String str){
String answer="";
char c=' ';
int count=1;
for(char x : str.toCharArray()){
if(x != c){
if(count>1) answer+=count;
c=x;
answer+=x;
count=1;
}
else{
count++;
}
}
if(count>1) answer+=count;
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
받은 문자열을 chararray로 변환하나씩 변환하며 비교한다. 처음 시작하는 문자를 발견하면 일단 새로운 문자열에 넣고 현재 판단하고있는 문자를 c 에다가 넣는다. 그후 개수를 세어가며 연속 2이상인 경우만 새로운 문자열에 추가한다.
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 T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
System.out.println(T.solution(str));
}
}