<섹션1-STRING> 11. 문자열 압축

조이·2021년 7월 20일
0

자바 알고리즘

목록 보기
11/41
post-thumbnail

11. 문자열 압축

<설명>

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단 반복횟수가 1인 경우 생략합니다.

<입력>

첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

<출력>

첫 줄에 압축된 문자열을 출력한다.

===================================================

<코드>

(1) 첫번째 풀이

처음 값을 저장하여 비교하기 시작하여 같다면 sum에 하나씩 추가하고 다르다면 바뀐 알파벳을 저장하고 그전의 알파벳과 sum을 출력한다.


import java.util.Scanner;

public class Main {
	public String solution(String sentence) {
		String answer="";
		char [] array=sentence.toCharArray();
		char t=array[0];
		int sum=0;
		for(int i=0;i<sentence.length();i++) {
			if(array[i]==t) {
				sum++;
			}
			else {
				t=array[i];
				if(sum==1) {
				answer+=array[i-1];
				}
				else {
					answer+=array[i-1];
					answer+=sum;
				}
				sum=1;
				
			}
		}

		if(sum==1) {
			answer+=array[sentence.length()-1];
		}
		else {
			answer+=array[sentence.length()-1];
			answer+=sum;
		}
		return answer;
	}
	
	
	
	public static void main(String[] args) {
		Main main = new Main();
		Scanner scan = new Scanner(System.in);
		String sentence=scan.next();
		System.out.println(main.solution(sentence));
	}
}

(2) 두번째 풀이

값을 저장하지 않고 다음 것과 비교하여 같다면 cnt를 하나씩 추가한다. 다르다면 answer에 현재 위치의 알파벳을 저장하고 cnt가 1보다 크다면 String.valueOf( ) 을 이용하여 answer에 저장한다. 마지막으로 answer을 반환한다.

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));
	}
}

<중요>

1) charAt( ) 을 잘 활용 할 것

2) int형을 String으로 변환

  • String.valueOf(x);
profile
joy_study

0개의 댓글