function solution(s) {
let stack = [];
let count = 0;
for(let i = 0; i < s.length; i += 1){
stack.push(s[i]);
const same = stack.filter((item) => item === stack[0]);
const notSame = stack.filter((item) => item !== stack[0]);
if(same.length === notSame.length){
count += 1;
stack = [];
}
}
if(stack.length !== 0){
count += 1;
}
return count;
}
방법은 다음과 같다.
스택에 문자를 넣는다. 스택 가장 아래에 있는 문자가 기준이 될 것이다.
filter()
를 통해서 기준 글자와 같은 배열, 같지 않은 배열을 생성한다.
이 둘의 길이가 같다면, 문제 조건에 부합하므로 count
를 1
증가시킨다.
다음 케이스를 판별하기 위해 스택을 초기화한다.
주어진 문자열의 끝까지 이를 반복한다.
만약, 스택에 값이 남아있다면 처리되지 않은 문자열들이므로,
이들은 하나의 문자열로 본다.
따라서, count
가 1
증가한다.
count
는 곧 분해한 문자열의 개수이다.
for
문이 아닌 고차 함수를 사용하면 아래와 같다.
function solution(s) {
let stack = [];
let count = 0;
[...s].forEach((str, index) => {
stack.push(str);
const same = stack.filter((item) => item === stack[0]);
const notSame = stack.filter((item) => item !== stack[0]);
if(same.length === notSame.length){
count += 1;
stack = [];
}
})
if(stack.length !== 0){
count += 1;
}
return count;
}