QUOTE THE DAY
“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”
-
이글슨 (Eagleson)
반응형
코딩테스트 연습문제 Lv. 1
문자열 나누기
문제
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
입출력 예
s | result |
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
입출력 예 설명
입출력 예 #1
- s="banana"인 경우 ba - na - na와 같이 분해됩니다.
입출력 예 #2
- s="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.
입출력 예 #3
- s="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.
solution.js
function solution(s) {
let answer = 0;
while (s.length > 0) {
const x = s[0];
let xCount = 1;
let otherCount = 0;
let i = 1;
while (i < s.length && xCount !== otherCount) {
if (s[i] === x) {
xCount++;
} else {
otherCount++;
}
i++;
}
answer++;
s = s.substring(i);
}
return answer;
}
- answer 변수를 0으로 초기화합니다. 이 변수는 분해한 문자열의 개수를 저장할 것입니다.
- 주어진 문자열 s의 길이가 0보다 큰 동안 반복합니다.
- 첫 번째 문자를 x 변수에 저장합니다.
- xCount 변수를 1로 초기화합니다. xCount는 문자열에서 x와 동일한 문자의 개수를 저장할 것입니다.
- otherCount 변수를 0으로 초기화합니다. otherCount는 문자열에서 x와 다른 문자의 개수를 저장할 것입니다.
- 인덱스 변수 i를 1로 초기화합니다. i는 문자열을 순회하기 위한 변수입니다.
- i가 문자열의 길이보다 작고, xCount와 otherCount가 서로 다른 동안 다음을 반복합니다.
- s[i]가 x와 동일한 경우, xCount를 1 증가시킵니다.
- 그렇지 않은 경우, otherCount를 1 증가시킵니다.
- i를 1 증가시킵니다.
- 현재까지 읽은 문자열을 분리하기 위해 answer를 1 증가시킵니다.
- s의 i 인덱스부터 끝까지의 문자열을 substring 함수를 사용하여 잘라내고, 잘라낸 부분을 s에 다시 저장합니다.
- 반복문을 통해 남은 부분에 대해 위의 과정을 반복합니다.
- 반복문이 종료되면 최종적으로 answer를 반환합니다.
반응형