https://school.programmers.co.kr/learn/courses/30/lessons/140108
function solution(s) {
let x = 1, y = 0, answer = 0, prev = s[0], i = 1;
if (s.length === 1) return 1;
for (const v of [...s].slice(1)) {
if (i === s.length - 1) {
answer++;
break;
}
i++;
if (x === 0) {
prev = v;
x++;
continue;
}
if (prev === v) x++;
if (prev !== v) y++;
if (x === y) {
answer++;
x = 0;
y = 0;
}
}
return answer;
}
현재 문자와 다음 문자가 같은지 아닌지만 비교하고, 그에 따라 현재 문자 개수와 다른 문자 개수를 증가시키면서 같아질 때 answer
를 증가시켰다.
두 가지 부분에서 헤맸는데, 하나는 마지막에 남는 문자열이었다. ababc
를 예로 들면, ab-ab-c
가 되어 c
만 남게 된다. 이때는 비교할 문자 개수가 없어 answer
를 증가시키지 않는다. 때문에 i
를 두고 s.length - 1
과 비교하여 같으면 answer++
을 했다.
다른 하나는 s
의 길이가 1일 때였다. 문자열 1개는 비교 대상이 없으므로 answer
를 증가시키지 않는다. 이것을 제일 처음 분기로 하여 1
을 반환했다.