문제 :  https://www.acmicpc.net/problem/16634

 

16634번: Run-Length Encoding, Run!

Forrest lives in a prehistoric era of “dial-up Internet.” Unlike the fast streaming of today’s broadband era, dial-up connections are only capable of transmitting small amounts of text data at reasonable speeds. Forrest has noticed that his communica

www.acmicpc.net

 

문제 요약 : 해당 문자열을 인코딩 혹은 디코딩하여 출력

 

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_16634.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
34329832 cbkpar 16634 맞았습니다!! 16104KB 148ms Java 11 1268B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        if (st.nextToken().charAt(0) == 'E') {
            String str = st.nextToken();
            int cnt = 1;
            sb.append(str.charAt(0));
            int sz = str.length();
            for (int i = 1; i < sz; i++) {
                if (str.charAt(i) == str.charAt(i - 1)) {
                    cnt++;
                } else {
                    sb.append(cnt + "" + str.charAt(i));
                    cnt = 1;
                }
            }
            sb.append(cnt);
        } else {
            String str = st.nextToken();
            int sz = str.length();
            for (int i = 0; i < sz; i += 2) {
                for (int j = str.charAt(i + 1); j > '0'; j--) {
                    sb.append(str.charAt(i));
                }
            }
        }
        System.out.println(sb);
    }
}

인코딩의 경우

우선 1 번째 문자를 StringBuilder에 더해준 후 cnt 의 값을 1로 초기화 한다.

그 후 주어진 문자열의 2 번째 문자 부터 확인하며

 

- 이전 문자와 같을 경우 cnt 값을 1 증가시켜 준다.

 

- 이전 문자와 다를 경우 cnt 값과 해당 문자열을 StringBuilder에 더해 주고

  cnt 값을 1로 초기화한다.

 

문자열 확인이 끝나면 StringBuilder에 cnt 값을 더해주고 출력해준다.

 

 

디코딩의 경우

주어진 문자열을 2 개 단위로 확인하며 뒤에 주어진 숫자 만큼

앞의 문자열을 StringBuilder에 더해준 후에 출력한다.

 

+ Recent posts