문자열 s를 아래 규칙으로 나눌 때 총 덩어리의 수를 반환하는 문제이다.
x)로 정한다same), 다른 글자 수(diff)를 센다same == diff가 되는 순간 하나의 덩어리로 자른다s = "banana"
1번째 덩어리: x = 'b'
b → same=1, diff=0
a → same=1, diff=1 ← same == diff → "ba" 자르기, answer=1
2번째 덩어리: x = 'n'
n → same=1, diff=0
a → same=1, diff=1 ← same == diff → "na" 자르기, answer=2
3번째 덩어리: x = 'n'
n → same=1, diff=0
a → same=1, diff=1 ← same == diff → "na" 자르기, answer=3
총 덩어리 수 → 3
두 가지 포인트가 있다.
첫 번째, 덩어리가 잘린 직후 다음 글자를 새로운 기준 문자로 설정해야 한다.
if (i + 1 < s.length()) {
x = s.charAt(i + 1);
}
두 번째, 문자열 끝까지 왔는데 same == diff가 되지 않은 경우 잘리지 않은 덩어리가 남아있다. 이를 마지막에 +1로 처리해야 한다.
if (same > 0) {
answer++;
}
예를 들어 "xxxxx"처럼 기준 문자만 있으면 same == diff가 절대 되지 않아서 덩어리가 하나도 안 잘린 채 끝난다. 이럴 때 same > 0이면 처리 안 된 덩어리가 있다는 의미이다.
구체적으로 정리한 풀이 흐름:
x로 설정same, diff 증가same == diff이면 덩어리 수 +1, same/diff 초기화, 다음 기준 문자 설정same > 0이면 덩어리 수 +1class Solution {
public int solution(String s) {
int answer = 0;
int same = 0, diff = 0;
char x = s.charAt(0);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == x) {
same++;
} else {
diff++;
}
if (same == diff) {
answer++;
same = 0;
diff = 0;
if (i + 1 < s.length()) {
x = s.charAt(i + 1);
}
}
}
if (same > 0) {
answer++;
}
return answer;
}
}