코딩 테스트/알고리즘 문제풀이

문자열 압축

리져니 2021. 8. 11. 02:24

 

 

설명

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는

문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.

단 반복횟수가 1인 경우 생략합니다.

 

입력

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

 

출력

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

 

예시 입력 1 

KKHSSSSSSSE

예시 출력 1

K2HS7E

 

예시 입력 2 

KSTTTSEEKFKKKDJJGG

예시 출력 2

KST3SE2KFK3DJ2G2

 


 

제출1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine()+" ";

        int lt =0, rt=1;
        int count = 1;

        while(rt!=str.length()){
            if(str.charAt(lt) == str.charAt(rt)) count++;
            else {
              String result = (1 < count) ? String.valueOf(count) : "";
              System.out.print(str.charAt(lt)+result);
              lt = rt;
              count =1;
            }
            rt++;
        }
    }
}

 

 

제출2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine()+ " ";

        int sum = 1;

        for(int i=0;i<str.length()-1;i++){
            if(str.charAt(i) == str.charAt(i+1)){
                sum++;
            }else {
                System.out.print(str.charAt(i));
                if (sum > 1) {
                    System.out.print(sum);
                }
                sum=1;
            }
        }
    }
}

결과

 

 

String str = br.readLine()+ " ";

입력받은 문자 마지막에 공백을 추가해야 for문이 마지막 문자까지 계산해서 출력을 한다.

for문에서 다음 문자가 현재 문자와 동일하면 개수만 세고 출력은 안하기 때문에, 반드시 다다음 문자까지 돌려야한다.

728x90

'코딩 테스트 > 알고리즘 문제풀이' 카테고리의 다른 글

보이는 학생  (0) 2021.08.11
암호  (0) 2021.08.11
가장 짧은 문자거리  (0) 2021.08.10
유효한 팰린드롬  (0) 2021.08.10
중복문자제거  (0) 2021.08.10