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

초록귤·2024년 5월 18일
0

JS코테

목록 보기
7/9

내 코드

function solution(s) {
    let firstAlphabet = s[0];
    let countFirst = 0;
    let countOther = 0;
    let answerCount = 0;
    // 첫번째 글자 카운트 나머지 글자 카운트, 같은 경우 answer +=1 로 갯수만 추가
    for(i=0; i<s.length; i++){
        if(firstAlphabet === s[i]){
            countFirst +=1
        }
        else{
            countOther +=1;
            if(countFirst === countOther){
                answerCount +=1 
                countFirst =0
                countOther =0
                if(i!==s.length-1){
                    firstAlphabet = s[i+1]
                }
            }
        }
        if(i === s.length-1 && countFirst !== countOther){
            answerCount +=1
        }
    }
    return answerCount
}
내풀이-비교 count다른방법(1)-먼저 count다른방법(2)-재귀
시간

다른 풀이(1) - 먼저 count

처음 count 1로 설정해주고, 첫 글자와 다음 글자 비교하여
같지 않은 경우 count--; 해주어서 answer를 먼저 증가시켜준다.
이렇게 하면 마지막 배열이 남는 경우를 추가고려하지 않아도 된다.

function solution(s) {
    let answer = 0;
    let current;
    let count = 0;

    for(let i = 0; i < s.length; i++) {
        if(count === 0) {
            answer++;
            current = s[i]
            count = 1
        } else {
            if(current !== s[i]) count--;
            else count++;
        }
    }

    return answer;
}

다른 풀이(2)-재귀

function solution(s, count=0) {
    if(!s) return count
    let [first, ...rest] = s.split("")
    let countSame = 1
    let countInSame = 0
    let i=0
    for(; i<rest.length; i++){
        if(rest[i] === first) countSame++
        else countInSame++
        if(countSame === countInSame) break
    }
    return solution(rest.slice(i+1).join(""), count+1)
}
profile
초록색 귤이 노랑색으로 익어가듯, 실력이 익어가기 위해 노력하는 개발자 lahee입니다.

0개의 댓글