[프로그래머스 | Javascript] 문자열 나누기

박기영·2022년 12월 11일

프로그래머스

목록 보기
107/159

solution

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;
}
profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글