문제 : 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에 더해준 후에 출력한다.
'백준온라인' 카테고리의 다른 글
| [백준온라인] 2687번 팩스 받기 (0) | 2021.10.13 |
|---|---|
| [백준온라인] 2686번 팩스 (0) | 2021.10.13 |
| [백준온라인] 13772번 Holes (0) | 2021.08.09 |
| [백준온라인] 13773번 Olympic Games (0) | 2021.08.08 |
| [백준온라인] 15926번 현욱은 괄호왕이야!! (0) | 2021.08.07 |