풀이
김영준
function solution(s) { // 분해한 문자열 개수, 첫 글자 인덱스, 같을 때 카운트, 다를 때 카운트 let result = 0, x = 0, same = 0, differ = 0; // 문자열 순회 for (let i = 0; i < s.length; i++) { // 첫 문자와 해당 문자가 같으면 same 증가, 다르면 differ 증가 s[x] === s[i] ? same++ : differ++; // 두 횟수가 같아지면 분해한 문자열 개수를 1증가 시키고 첫 글자를 다음 인덱스로 초기화 if (same === differ) { x = i + 1; result++; } } // 두 횟수가 다르면 마지막까지 읽은 문자열도 분리 (사실상 카운트 증가) return same !== differ ? result + 1 : result; }
이종현
function solution(s) { let firstStr = 0; let nextStr = 0; let str = s[0]; let answer = 0; for (let i = 0; i < s.length; i++) { if (s[i] === str) firstStr++; else nextStr++; if (firstStr === nextStr) { str = s[i + 1]; answer++; firstStr = 0; nextStr = 0; } } return firstStr !== nextStr ? answer + 1 : answer }
박노철
function solution(s) { /*첫 글자를 x, 왼쪽에서 오른쪽으로 x와 x가 아닌 다른 글자 들이 나온 횟수 처음으로 두 횟수가 같아지는 순간 stop, 문자열 분리, 남은 문자에대해서 위의 과정 반복 */ let x =null; let same=0; let diff=0; let order=0; let result =0; //order가 s의 길이보다 커질때까지 반복 while(order<=s.length){ //order가 0이면 x설정 및 초기화, 아니라면 x와 비교 if(order===0){ x=s[0]; same=1; diff=0; }else{ if(x===s[order])same++; else diff++; } // same 과 diff 가 같다면 s 잘라주고, order를 0으로 result++;, 아니라면 order++; if(same===diff){ s=s.slice(order+1) order=0; result++; }else order++; } // 마직막까지 같지 않은 경우를 위해 result++; if(s.length>0)result++; return result }
이민희
function iterateString(s, result) { const x = s[0]; let countX = 1; let countOthers = 0; for (let i = 1; i < s.length; i++) { s[i] === x ? countX++ : countOthers++; if (countX === countOthers) { if (i === s.length - 1) return ++ result; return iterateString(s.slice(i + 1), ++ result) } } return ++ result; // 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없을 때, 역시 분리 } function solution(s) { return iterateString(s, 0) }
박건우
function solution(s) { let answer = 0; for(let i = 0; i<s.length; i++) { let firstLetterCount = 1; // 첫번째 글자 개수 let othersCount = 0; // 첫번째 글자와 다른 글자의 개수 let nextIndex = i + 1; const firstLetter = s[i]; // 첫번째 글자 // 문자의 끝까지 도달하지 않았고 첫번째 글자 개수와 나머지 글자 개수가 다르면 반복 // 같아지면 분리된 것으로 간주, answer 1증가 while(nextIndex < s.length && firstLetterCount !== othersCount) { if(s[nextIndex] === firstLetter) { firstLetterCount++; }else { othersCount++; } nextIndex++; } i = nextIndex - 1; // i는 다음 반복에서 1이 증가하므로 1을 빼주어야함 answer++; } return answer; }
박주연
function solution(s) { const cnt = [0, 0]; //x와 x이외의 문자 횟수를 담는 배열 let answer = 0; // 분해한 문자열 개수 let x = s[0]; // s[0]으로 시작 하지만 문자열이 분해된 경우 x가 변경된다. for(let i = 0 ; i < s.length ; i++){ // 마지막 문자인 경우는 무조건 answer+1 해주고 for문을 빠져나온다 if(i === s.length-1){ answer++; break; } // x(첫글자)와 x외 글자 횟수를 count s[i] === x ? cnt[0]++ :cnt[1]++; // 횟수가 같을 때 cnt 배열과 start를 변경한다. if(cnt[0] === cnt[1]){ answer++; cnt[0] = cnt[1] = 0; x = s[i+1]; } } return answer }