김찬진의 개발 블로그
23/02/01 [⭐Inf_0111 문자열 압축] 본문
설명
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는
문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.
입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력
첫 줄에 압축된 문자열을 출력한다.
예시 입력 1
KKHSSSSSSSE
예시 출력 1
K2HS7E
예시 입력 2
KSTTTSEEKFKKKDJJGG
예시 출력 2
KST3SE2KFK3DJ2G2
코드
기억할 것
버블정렬처럼 두 요소를 비교할 때에는
idx 초과를 방지하기 위해 마지막 요소는 포함시키지 않는 것(len-1)이 중요하다. ()
하지만 이 경우는 마지막 요소 자체도 검사해야 한다.
따라서 입력값에 공백문자를 추가해야 한다.
그럼 idx 초과를 방지하기 위해 마지막 요소(공백문자)는 포함시키지 않되(len-1) 마지막 요소 자체도 검사할 수 있다.
import java.util.Scanner;
public class Main {
public String solution(String str){
StringBuilder sb = new StringBuilder();
str = str + " "; // 마지막 요소까지 빠짐없이 비교하기 위해 공백문자 붙이기
int cnt = 1;
for(int i=0; i<str.length()-1; i++){ // 마지막 요소까지 빠짐없이 비교
if(str.charAt(i) == str.charAt(i+1)){ // 내 옆이 같은 수라면
cnt++;
} else{
sb.append(str.charAt(i)); // 내 옆이 다른 수라면
if(cnt>1){ // cnt가 1보다 크다면
sb.append(cnt); // sb에 cnt 붙임
cnt=1; // cnt=1 재설정
}
// cnt가 1이라면 sb에 cnt 안붙임
}
}
return sb.toString();
}
public static void main(String[] args) {
Main m = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(m.solution(str));
}
}
'1일1알고 > Java Algorithm' 카테고리의 다른 글
23/02/01 [Inf_0201 큰 수 출력하기] (0) | 2023.02.02 |
---|---|
23/02/01 [Inf_0112 암호] (1) | 2023.02.01 |
23/01/31 [Inf_0110 가장 짧은 문자거리] (0) | 2023.02.01 |
23/01/31 [⭐Inf_0109 숫자만 추출] (0) | 2023.01.31 |
23/01/31 [Inf_0108_유효한 팰린드롬] (0) | 2023.01.31 |
Comments