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

박기영·2022년 12월 11일
1

프로그래머스

목록 보기
107/159
post-custom-banner

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()를 통해서 기준 글자와 같은 배열, 같지 않은 배열을 생성한다.
이 둘의 길이가 같다면, 문제 조건에 부합하므로 count1 증가시킨다.
다음 케이스를 판별하기 위해 스택을 초기화한다.
주어진 문자열의 끝까지 이를 반복한다.

만약, 스택에 값이 남아있다면 처리되지 않은 문자열들이므로,
이들은 하나의 문자열로 본다.
따라서, count1 증가한다.

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

0개의 댓글