String_문자열 압축
✅ 알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기
단 반복횟수가 1인 경우 생략합니다.
맨 마지막 인덱스가 없으면 에러나니까 미리 str에 빈 문자를 맨 마지막에 추가해두고 시작한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Main {
public String solution(String str) {
String answer= "";
str = str + " "; //맨 뒤에 문자 하나 추가해두기
int p=1;
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
char n = str.charAt(i+1);
if (c == n) {
p++;
} else if(c != n){
answer += c;
if (p != 1) {
answer += p;
p = 1;
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
String str= sc.next();
System.out.print(T.solution(str));
}
}
//⭐️input:
// KKHSSSSSSSE
//⭐️output:
//K2HS7E
//⭐️input:
// KSTTTSEEKFKKKDJJGG
//⭐️output:
//KST3SE2KFK3DJ2G2
🟢 맨 마지막 인덱스보다 작니 ? 작아서 값 있으면 : 값 없으면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Main {
public String solution(String str) {
String answer= "";
char[] charArr= str.toCharArray();
int p=1;
for(int i=0; i<charArr.length; i++) {
char c = charArr[i];
char n = (i < charArr.length - 1) ? charArr[i + 1] : '0';
if (c == n) {
p++;
} else if(c != n){
answer += c;
if (p != 1) {
answer += p;
p = 1;
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
String str= sc.next();
System.out.print(T.solution(str));
}
}
- int p = 1로 둔다.
- 이제 array를 돌면서 지금 인덱스와 다음 인덱스에 있는 알파벳을 비교할 것이다.
- 그런데 맨 마지막 인덱스에 다다르면 존재하지 않는 인덱스와 비교해야 한다. 이를 해결하는 방법은 두 가지가 있다.
⭐️ 3-1. array 돌기 전에 str의 맨 마지막에 빈 문자를 하나 추가해두기
⭐️ 3-2. 맨 마지막 인덱스보다 작니? 그러면 원래대로 다음 인덱스랑 비교 : 아니면 빈 문자 아무거나 - 비교 후 같으면 p++
- 지금, 그 다음 인덱스끼리 비교 후 같지 않으면 정답 String에다가 지금 알파벳을 추가하고, p에다가 몇 번 나왔는지 누적해놓았으니 p도 추가한다.
- 그런데 p가 1인 경우 추가하지 말라고 했으니 p가 1이면 추가하지 않는다는 if문
- 그리고 p는 다시 1로 초기화
🔵 ThingsILearned
✔️ 배열에서 없는 값을 비교하게 되면 에러 뜨는데요?
- 미리 배열 맨 마지막에 의미 없는 아무 값을 추가해두거나
- 배열 맨 마지막에 다다랐을 때 없다면 ~게 해라 라는 조건문을 ?를 사용해서 간단하게 짜둔다.
✔️ 굳이 charArray로 바꾸어야 할까? 잘 생각해보자.
This post is licensed under CC BY 4.0 by the author.