import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next().toUpperCase();
String[] ary;
int gap = 0;
StringBuffer buffer = new StringBuffer(s);
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) != s.charAt(i - 1)) { // 현재값과 이전값이 다르면 새로운 문자 -> "/"를 입력해 구분해줌
buffer.insert(i + gap, '/');
gap++; // 알파벳을 구분할 때마다 "/"을 추가해주는데, 이때문자열의 크기가 +1씩 증가하고 gap도 같이 ++해준다. 이유는 insert "/"가
// 입력되는 위치를 정확하게 잡아주기 위함
}
}
ary = buffer.toString().split("/"); // buffer문자열은 "/"을 기준으로 같은 문자끼리 뭉침. "/"을 기준으로 구분하여 배열을 반환
int charCount;
char c;
for (int z = 0; z < ary.length; z++) {
charCount = ary[z].length();
c = ary[z].charAt(0);
if (charCount == 1) { // 1인 경우는 문자만 출력
System.out.print(c);
} else {
System.out.print(charCount + "" + c);
}
}
}
}
문제는 문자열이 주어졌을 때 연속하는 문자가 나왔을 때, 그 문자가 몇번 나왔는지 횟수와, 문자를 출력하는 문제이다. 만약 문자가 연속되지 않고 한번밖에 나오지 않았으면 횟수는 제외하고 출력한다.
예를들어, "AAABCDDEFFF"라는 문자열이 있다면 정답은 "3ABC2DE3F"이 된다.
아이디어는,StringBuffer을 사용하여 입력받은 문자열을 돌면서 n번쨰 문자와 n-1문자열이 다르다면 n위치에 문자열에 "/"을 추가해준다. 문자열에서 해당 문자의 군집을 구분하기 위함이다. 문자들끼리 모두 나누었으면 문자열을 "/"을 기준으로 split해준 값은 ary에 넣는다.
마지막으로 ary안의 값들은 AAA,B,C,DD,E,FFF값을 가지고 ary의 n번째 인덱스의 값의 길이와 첫번째 문자값을 출력해준다.
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] division (0) | 2019.04.19 |
---|---|
[알고리즘 문제] Mountain (0) | 2019.04.16 |
[알고리즘 문제] Palindrome (0) | 2019.04.15 |
[알고리즘 문제] Streetree (0) | 2019.04.11 |
[알고리즘 문제] pfactorization (0) | 2019.04.09 |