▼ What ?
이제 지금까지 배운 것들을 전체적으로 활용해보는 문제들을 풀어보려고 한다. 이번 문제는 문자열을 다루는 문제이다.
▼ 문자열 압축
문제 정보
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하세 요. 단 반복횟수가 1인 경우 생략합니다.
제한사항
- 문자열 s의 길이는 100을 넘지 않습니다.
입출력 예

어떻게 해결해야 할까 ?
- 새로운 문자가 발견되기 전까지 해당 문자의 빈도수를 체크해주고, 새로운 문자가 발견되면 그전 문자와 해당 문자의 빈도수를 해주면 StringBuilder에 더해주면 될 것 같다
- 기본형 정수(int)를 StringBuilder에 'append()' 해줄 때엔 'String.valueOf()'를 이용 String 객체로 변환을 먼저 해줘야 한다
- 단, 문자가 연속으로 반복되지 않을 경우엔 반복 횟수(1)가 반환되지 않도록 한다
- 그리고 마지막으로 등장한 문자는 이후에 새로운 문자가 발견될 수 없기 때문에 따로 계산해서 StringBuilder에 더해줘야 한다
해결 코드
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
int count = 1;
for(int i = 1; i < s.length(); i++) {
// 바로 전 문자와 같은 문자가 탐색된 경우
if(s.charAt(i-1) == s.charAt(i)) count++;
else {
sb.append(s.charAt(i-1);
if(count > 1) sb.append(String.valueOf(count));
count = 1;
}
}
sb.append(s.charAt(s.length() - 1));
if(count > 1) answer.append(String.valueOf(count));
return sb.toString();
}
}
▼ 정리
- StringBuilder에 'append()' 해줄 때에 기본형 정수(int)를 String 객체로 변환시켜주기 위해서 'String.valueOf()'를 사용했는데, String 객체로 변환하는 것 말고도 'Integer.valueOf()'처럼 다른 class에도 해당 class 타입의 객체로 변환해줄 수 있는 'valueOf()'라는 이름의 메서드가 정의되어 있다는 것을 기억해두자
▼ What ?
이제 지금까지 배운 것들을 전체적으로 활용해보는 문제들을 풀어보려고 한다. 이번 문제는 문자열을 다루는 문제이다.
▼ 문자열 압축
문제 정보
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하세 요. 단 반복횟수가 1인 경우 생략합니다.
제한사항
- 문자열 s의 길이는 100을 넘지 않습니다.
입출력 예

어떻게 해결해야 할까 ?
- 새로운 문자가 발견되기 전까지 해당 문자의 빈도수를 체크해주고, 새로운 문자가 발견되면 그전 문자와 해당 문자의 빈도수를 해주면 StringBuilder에 더해주면 될 것 같다
- 기본형 정수(int)를 StringBuilder에 'append()' 해줄 때엔 'String.valueOf()'를 이용 String 객체로 변환을 먼저 해줘야 한다
- 단, 문자가 연속으로 반복되지 않을 경우엔 반복 횟수(1)가 반환되지 않도록 한다
- 그리고 마지막으로 등장한 문자는 이후에 새로운 문자가 발견될 수 없기 때문에 따로 계산해서 StringBuilder에 더해줘야 한다
해결 코드
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
int count = 1;
for(int i = 1; i < s.length(); i++) {
// 바로 전 문자와 같은 문자가 탐색된 경우
if(s.charAt(i-1) == s.charAt(i)) count++;
else {
sb.append(s.charAt(i-1);
if(count > 1) sb.append(String.valueOf(count));
count = 1;
}
}
sb.append(s.charAt(s.length() - 1));
if(count > 1) answer.append(String.valueOf(count));
return sb.toString();
}
}
▼ 정리
- StringBuilder에 'append()' 해줄 때에 기본형 정수(int)를 String 객체로 변환시켜주기 위해서 'String.valueOf()'를 사용했는데, String 객체로 변환하는 것 말고도 'Integer.valueOf()'처럼 다른 class에도 해당 class 타입의 객체로 변환해줄 수 있는 'valueOf()'라는 이름의 메서드가 정의되어 있다는 것을 기억해두자