📌 문제 설명
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복 횟수를 문자 오른쪽에 표기하여 문자열을 압축하는 프로그램을 작성하세요.
- 반복 횟수가 1인 경우 생략합니다.
- 문자열의 길이는 최대 100입니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 대문자로 구성된 문자열 (최대 길이 100)
🔹 출력
- 첫 번째 줄: 압축된 문자열 출력
🔸 예제 입력 1
KKHSSSSSSSE
🔸 예제 출력 1
K2HS7E
🔸 예제 입력 2
KSTTTSEEKFKKKDJJGG
🔸 예제 출력 2
KST3SE2KFK3DJ2G2
💡 해결 방법
- 문자열을 순회하면서 연속된 문자의 개수를 세기
- 현재 문자와 다음 문자가 같다면 cnt 증가
- 현재 문자와 다음 문자가 다르면 결과 문자열에 추가 후 cnt 초기화
- 마지막 문자 처리를 위해 문자열 끝에 공백 추가 (s = s + " ")
- 반복 횟수가 1 이상일 때만 숫자 추가
💻 코드 구현 (Java)
package partString;
import java.util.*;
public class Problem11 {
public String solution(String s) {
String answer = "";
s = s + " "; // 마지막 문자 처리를 위해 공백 추가
int cnt = 1;
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
cnt++;
} else {
answer += s.charAt(i);
if (cnt > 1) answer += cnt; // 반복 횟수가 1보다 크면 추가
cnt = 1;
}
}
return answer;
}
public static void main(String[] args) {
Problem11 T = new Problem11();
Scanner kb = new Scanner(System.in);
String s = kb.next();
System.out.println(T.solution(s));
kb.close();
}
}
📖 코드 설명
1️⃣ 문자열 끝에 공백 추가 (s = s + " ")
s = s + " ";
- ✅ 모든 인덱스에서 s.charAt(i+1)과 비교할 수 있도록 보장
- 기존 문자열의 마지막 문자도 s.charAt(i+1)과 비교해야 하는데, 마지막 문자는 원래 i+1이 존재하지 않음.
- ✅ 인덱스 범위 초과 예외(IndexOutOfBounds)를 방지
2️⃣ 문자 반복 횟수 계산 및 압축 문자열 생성
for (int i = 0; i < s.length() - 1; i++) {
if (s.charAt(i) == s.charAt(i + 1)) {
cnt++;
} else {
answer += s.charAt(i);
if (cnt > 1) answer += cnt;
cnt = 1;
}
}
- 현재 문자와 다음 문자를 비교하면서 연속된 문자의 개수를 센다
- 문자가 바뀌는 순간 압축 문자열에 추가
- ✅ 반복 횟수가 1 이상일 때만 숫자를 추가
⏳ 시간 복잡도 분석
- O(n) (n: 문자열 길이)
- 문자열을 한 번 순회하며 연속된 문자의 개수를 세고, 압축 문자열을 생성하므로 선형 시간 복잡도
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 2. Array - 1. 큰 수 출력하기 (0) | 2025.03.21 |
|---|---|
| 섹션 1. 문자열 - 12. 암호 (0) | 2025.03.18 |
| 섹션1. 문자열 - 10. 가장 짧은 문자 거리 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 9. 숫자만 추출 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 8. 유효한 팰린드롬 (0) | 2025.03.18 |