이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static String solution(String str) {
StringBuilder result = new StringBuilder();
int count = 1;
for (int i = 1; i < str.length(); ++i) {
if(str.charAt(i) == str.charAt(i - 1)) ++count;
else
{
result.append(str.charAt(i - 1));
if(count > 1) result.append(count);
count = 1;
}
}
result.append(str.charAt(str.length() - 1)); //마지막 문자 처리
if(count > 1) result.append(count);
return result.toString();
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(solution(br.readLine()));
}
}
설명
- StringBuilder result = new StringBuilder();
결과 문자열을 효율적으로 만들기 위해 StringBuilder 객체를 생성한다. StringBuilder는 문자열을 추가할 때 성능이 뛰어나다. - int count = 1;
현재 연속된 문자의 개수를 저장하는 변수 count를 초기화한다. 최초에는 1로 시작한다. - for (int i = 1; i < str.length(); ++i)
문자열의 두 번째 문자부터 마지막 문자까지 순회한다. 첫 번째 문자와 비교하기 위해 인덱스 i를 1부터 시작한다. - if (str.charAt(i) == str.charAt(i - 1))
- 현재 문자(str.charAt(i))가 이전 문자(str.charAt(i - 1))와 같은지 비교한다.
- 같으면 count를 1 증가시킨다. 즉, 연속된 문자의 개수를 증가시킨다. - else 블록 -> 현재 문자가 이전 문자와 다르면
- result.append(str.charAt(i - 1)) : 이전 문자를 결과 문자열에 추가한다.
- if (count > 1) result.append(count); : count가 1보다 크면, 연속된 문자의 개수를 결과 문자열에 추가한다.
- count = 1 : count를 다시 1로 초기화한다. - 마지막 문자 처리 -> 반복문이 종료된 후, 마지막 문자를 처리하기 위해
- result.append(str.charAt(str.length() - 1)) : 마지막 문자를 결과 문자열에 추가한다.
- if (count > 1) result.append(count); : 마지막 문자가 여러 번 연속된 경우, 그 개수를 결과 문자열에 추가한다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chpater 2, 1번 문제(큰 수 출력하기) (0) | 2024.07.12 |
---|---|
[인프런 알고리즘] Chpater 1, 12번 문제(암호) (0) | 2024.07.11 |
[인프런 알고리즘] Chapter 1, 10번 문제(가장 짧은 문자거리) (0) | 2024.07.09 |
[인프런 알고리즘] Chapter 1, 9번 문제(숫자만 추출) (0) | 2024.07.08 |
[인프런 알고리즘] Chapter 1, 8번 문제(유효한 팰린드롬) (0) | 2024.07.07 |