https://school.programmers.co.kr/learn/courses/30/lessons/140108
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 문자열 s가 매개변수로 주어질 때, 문자열들로 분해하고, 분해한 문자열의 개수를 return하라 - 주어진 자료는 무엇인가?
- 문자열 분해 규칙 : 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. - 조건은 무엇인가?
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
2. 계획
- 첫번째 글자 x를 구한다.
- 주어진 문자를 순회하면서 x의 개수를 센다.
- x가 아닌 문자열의 개수를 센다.
- 두개의 개수가 같아지면 멈춘다.
- 멈춘 지점까지 자른다.
- 이를 반복한다.
- 남은부분이 없다면 종료한다.
- 더 읽을 글자가 없으면 지금까지 읽은 문자열을 분리하고 종료한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (s) => {
let sameCnt = 0;
let countX = 0;
let countNotX = 0;
let firstWord = '';
for (let word of s) {
if (!firstWord) {
firstWord = word;
}
if (firstWord === word) {
countX++;
} else {
countNotX++;
}
if (countX === countNotX) {
sameCnt++;
countX = 0;
countNotX = 0;
firstWord = '';
}
}
if (firstWord) {
sameCnt++;
}
return sameCnt;
}
test('문자열 나누기', () => {
expect(solution('banana')).toBe(3);
})
4. 반성
- 문제를 다른 방식으로 해결할 수 있는가?
- 재귀를 이용해서 풀어볼 수 있을 것 같다.
'코테연습' 카테고리의 다른 글
172. 할인행사 Javascript (0) | 2023.01.05 |
---|---|
171.귤 고르기 Javascript (0) | 2023.01.04 |
167. n^2 배열 자르기 Javascript (0) | 2022.09.22 |
166. 124 나라의 숫자 Javascript (0) | 2022.09.22 |
165. 튜플 Javascript (1) | 2022.09.21 |
댓글