1. 문제
같은 문자가 반복되는 경우 반복되는 문자 오른쪽에 반복 횟수를 표기하고 압축
반복횟수가 1이면 생략
2 - 1. 나의 풀이
1. i번째와 i + 1 번째를 비교한다.
2. 같다면 count 변수를 +1 한다. (count = 1로 초기화되어있음)
3. 다르다면 다른 문자라는 뜻이므로 count를 answer에 추가한다.
4. 다를 때 count = 1이면 그냥 넘어간다. count를 다시 1로 초기화한다. (반복횟수가 1이라는 뜻이므로)
ArrayIndexOutOfBoundsException가 계속 나서 고민하다가 char[] 을 초기화할 때 기존의 크기 + 1 로 선언했다.
i와 i + 1번째를 비교하므로 맨 마지막 요소까지 반복문이 실행되면 ArrayIndexOutOfBoundsException가 터질 가능성이 있으므로 배열의 크기를 1 늘려서 이를 방지한다.
2 - 2. 나의 코드
import java.util.Arrays;
import java.util.Scanner;
public class String11 {
public static String solution(String str) {
String answer = "";
char[] chArr = new char[str.length() + 1];
char[] chArr1 = str.toCharArray();
for (int i = 0; i < chArr1.length; i++) {
chArr[i] = chArr1[i];
}
int count = 1;
for (int i = 0; i < chArr.length -1; i++) {
if (chArr[i] == chArr[i + 1]) {
count++;
} else {
answer += chArr[i];
if(count == 1) continue;
answer += count;
count=1;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
}
3 - 1. 강의 풀이
나의 풀이와 같다.
하지만 나는 String을 char[]로 바꾼 다음 비교했다.
강의에서는 굳이 char[]로 바꾸지 않고 str.charAt()을 사용해 비교했다.
이게 더 효율적이다.
그리고 강의에서 int형 변수 count를 String 참조 타입 answer에 추가하기 위해서
answer += String.valueOf(count)를 사용했다.
3 - 2. 강의 코드
import java.util.Scanner;
public class String11_solution {
public static String solution(String str) {
String answer = "";
//반복문에서 i와 i+1을 비교하므로 맨 마지막 인덱스에서 오류가 발생할 수 있으므로 빈공간을 추가해줌.
str = str + " ";
int count=1;
for (int i = 0; i < str.length() - 1; i++) {
if(str.charAt(i) == str.charAt(i+1))count++;
else{
answer += str.charAt(i);
if(count==1) continue;
//answer += String.valueOf(count);
answer += count;
count=1;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
}
4. 얻어갈 점
1. 배열의 인덱스 요소에 대해 반복문을 실행할 때 ArrayIndexOutOfBoundsException을 조심하자.
2. int형 변수를 String 변수에 추가할 때 String.valueOf() 또는 Integer.toString()을 사용하자.
'자바 알고리즘 문제풀이 > String(문자열)' 카테고리의 다른 글
백준 1213번 팰린드롬 만들기 (0) | 2025.05.07 |
---|---|
String(문자열) - 12. 암호 (0) | 2023.08.23 |
String(문자열) - 10. 가장 짧은 문자거리 (0) | 2023.08.07 |
String(문자열) - 9. 숫자만 추출 (0) | 2023.07.29 |
String(문자열) - 8. 유효한 팰린드롬 (0) | 2023.07.24 |