문자열 나누기

Mudi·2023년 1월 5일
0

[JavaScript] Coding Test

목록 보기
15/23
post-thumbnail

문자열 나누기

문제 문자열 나누기


문제

문자열 s의 첫 글자를 x라 하고, x와 x가 아닌 글자의 빈도를 세어서 같아지면 그 자리에서 문자를 분리합니다. 이 과정을 반복했을 때 몇 개의 문자로 나눠지는지 구하는 함수를 완성하세요.


풀이

변수 선언

let answer = 0;

answer는 문자를 나눈 횟수를 의미합니다.


let xCount = 0;
let zCount = 0;

x인 글자의 빈도수와 x가 아닌 글자(z라 칭함)의 빈도수를 셀 수 있는 변수를 만듭니다.


let stack = [];

빈도수가 같아질 때 이전의 문자 분리를 쉽게하기 위하여 stack 배열을 만들어 줍니다.


let str = [];

분리 된 문자를 담을 배열도 만들어 줍니다.


반복문

    for(let i = 0; i < s.length; i++){
        stack.push(s[i])
        let x = stack[0]
        if(s[i] === x){
            xCount++;
        } else {
            zCount++;
            if(zCount === xCount){
               answer++;
               str.push(stack.join(''))
               xCount = 0;
               zCount = 0;
               stack = []
            }
        }
    }

문자열의 길이만큼 반복하는 반복문 실행합니다.
실행될 때 마다 s의 i번째 문자가 stack 배열에 들어갑니다.
이때 첫 글자인 x는 stack의 0번째 요소입니다.

x와 x가 아닌 글자 카운트

반복문 중 s[i]가 x와 같다면 x카운트 증가

같지 않다면 z카운트 증가
이 때 z카운트와 x카운트가 같아지면
문자의 나눈 횟수를 의미하는 answer를 증가시켜줍니다.

또 지금까지 stack 배열에 들어갔던 문자들을 join으로 묶어서 str 배열에 넣어줍니다.

새롭게 다시 이 과정을 반복해야하므로
x카운트와 z카운트, stack배열은 초기화 시켜줍니다.

마지막 글자가 혼자 남을 때

마지막 글자가 혼자 남는다면 마지막 글자가 x가 되는데
빈도수가 같아질 z가 더이상 없으므로 나뉘어진 횟수(answer)에 들어가지 않게 됩니다.

지금까지 분리되었던 문자인 str 배열을 join으로 합쳐서 원본 문자열인 s와 길이를 대조했을 때 같지 않다면 마지막 글자가 혼자 남은 경우인 것입니다.

    if(s.length === str.join('').length) {
        return answer;
    } else {
        return answer+1;
    }

이렇게 분기 처리를 해주어 answer를 반환하도록 하였습니다.


나의 코드

function solution(s) {
    let answer = 0;
    let xCount = 0;
    let zCount = 0;
    let stack = [];
    let str = [];
    
    for(let i = 0; i < s.length; i++){
        stack.push(s[i])
        let x = stack[0]
        if(s[i] === x){
            xCount++;
        } else {
            zCount++;
            if(zCount === xCount){
               answer++;
               str.push(stack.join(''))
               xCount = 0;
               zCount = 0;
               stack = []
            }
        }
    }
    
    if(s.length === str.join('').length) {
        return answer;
    } else {
        return answer+1;
    }
}

0개의 댓글