728x90
문제
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
예시
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 와 같이 분리된다.
나의 풀이
function solution(s) {
let string = "";
let count = 0;
let result = 0;
[...s].forEach((v, i) => {
string += v;
if (s[i+1] === undefined) return result++;
string[0] === v ? count++ : count--;
if (!count) {
result++;
string = "";
}
});
return result;
}
풀이 방법
1. 각 원소를 넣어줄 string, 첫 번째 글자와 같고 다름을 셀 count, 결과를 셀 result 변수를 선언해준다.
문자열 s를 배열로 변환한 후 forEach() 함수를 사용해서 반복해준다.
function solution(s) {
// 1
let string = "";
let count = 0;
let result = 0;
[...s].forEach((v, i) => {
...
});
return result;
}
2. 문자열 s의 원소를 string 변수에 넣어준다.
2-1. 만약 문자열 s에 다음 원소가 없다면 result 값을 증가시킨다.
2-2. string 문자열의 첫 번째 원소 값과 문자열 s의 원소의 값이 같다면 count를 증가시키고, 다를 경우 감소시킨다.
2-3. 만약 count 값이 false라면 (두 횟수가 같다면) result 값을 1 증가시키고 string 변수를 초기화한다.
function solution(s) {
let string = "";
let count = 0;
let result = 0;
[...s].forEach((v, i) => {
// 2
string += v;
// 2-1
if (s[i+1] === undefined) return result++;
// 2-2
string[0] === v ? count++ : count--;
// 2-3
if (!count) {
result++;
string = "";
}
});
return result;
}
728x90
'🧬알고리즘 > Programmers' 카테고리의 다른 글
[JavaScript] 달리기 경주 (0) | 2024.10.29 |
---|---|
[JavaScript] 가장 가까운 같은 글자 (0) | 2024.10.15 |
[JavaScript] 햄버거 만들기 (0) | 2024.10.15 |
[JavaScript] 폰켓몬 (4) | 2024.10.03 |
[JavaScript] 완주하지 못한 선수 (2) | 2024.10.03 |
댓글