본문 바로가기
알고리즘(Java)/String

[알고리즘]String(문자열) 11. 문자열 압축 - 알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우, 반복되는문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 ..

by snowballchoi 2021. 7. 18.
11. 문자열 압축
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 
반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램
입력) 첫 줄에 문자열이 주어집니다.
출력) 첫 줄에 압축된 문자열을 출력합니다.

 

 

1.

import java.util.Scanner;

public class Main {
	
	public static String solution(String str) {
		String answer = "";
		str = str + " "; // 문자열 끝에 빈 문자 추가
		int cnt = 1;
		
		for (int i=0; i<str.length()-1; i++) {
			if (str.charAt(i)==str.charAt(i+1)) cnt++;
			else {
				answer += str.charAt(i);
				if (cnt>1) answer += String.valueOf(cnt); // Integer.toString(cnt)로 해도 됨
				cnt = 1; // 1로 초기화
			}
		}
        
		return answer;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		System.out.println(solution(str));
	}

}

 

2.

import java.util.Scanner;

public class Main {
	
	public static String solution(String str) {
		String answer = "";
		int repeat = 0;		
		
		char c = str.charAt(0); // 맨처음 문자		
		answer += str.charAt(0); // 맨처음 문자 누적
		
		for (int i=0; i<str.length(); i++) {			
			if (str.charAt(i)==c) repeat++;
			else {
				c = str.charAt(i); // 새로운 문자
				if (repeat>1) answer += repeat; // 반복 횟수 누적
				answer += str.charAt(i); // 새로운 문자 누적 				 
				repeat = 1; // 1로 초기화
			}
		}
		if (repeat>1) answer += repeat; // 마지막 문자의 반복 횟수 누적
		
		return answer;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		System.out.println(solution(str));
	}

}

결과

입력
HELLOGOOOODDAYYY

출력
HEL2OGO4D2AY3

댓글