본문 바로가기
✅ 문제풀이

프로그래머스 Level 1 문자열 나누기 Javascript

by dogfoot.dev 2023. 10. 14.
728x90
728x90

프로그래머스 Level 1 문자열 나누기 Javascript 문제 풀이 입니다.

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/140108

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

✅ Javascript 답안 입니다 더보기 클릭!

 

더보기

function solution(s) {
    let answer = 0;
    const arr = [...s];
    let x = arr[0];
    let equal_cnt = 0;
    let diff_cnt = 0;
    let sliced_index = 0;
    for(let i=0; i < arr.length; i++){
        if(x == arr[i]){
           equal_cnt++; 
        } else { 
            diff_cnt++;
        }
        if(equal_cnt == diff_cnt){
            answer++;
            sliced_index = i+1;
            equal_cnt = 0;
            diff_cnt = 0;
            x = arr[i+1];
        }
    }
    if(sliced_index == arr.length) {
        return answer;
    } else {
        return ++answer;
    }
}

 

📌 해설

빡구현으로 해결하였습니다. 

문제에서 제시한 복잡한 문자열 나누기 과정을 잘 읽고 반복문과 조건문만 잘 걸어준다면 어렵지 않게 통과할 수 있었습니다. 

다른 사람의 풀이를 봤는데 재귀로 푼 해결법이 눈에 띄었습니다. 참고해 보아도 좋을 듯 합니다. 

 

    let answer = 0;
    const arr = [...s];
    let x = arr[0];
    let equal_cnt = 0;
    let diff_cnt = 0;
    let sliced_index = 0;

1. 변수 선언입니다. 

반복문을 돌리기 위해서 입력된 문자열 s 를 배열로 만들어 주었습니다. 

가장 먼저 읽는 문자 x를 arr[0] 으로 선언합니다. 

cnt 를 세기 위해서 equal_cnt, diff_cnt 를 각각 0 으로 선언합니다. 

sliced_index 를 0 으로 선언하고 이 변수에 arr 을 자른 인덱스를 넣어줄 것입니다. 

 

    for(let i=0; i < arr.length; i++){
        if(x == arr[i]){
           equal_cnt++; 
        } else { 
            diff_cnt++;
        }
        if(equal_cnt == diff_cnt){
            answer++;
            sliced_index = i+1;
            equal_cnt = 0;
            diff_cnt = 0;
            x = arr[i+1];
        }
    }

2. for 문입니다. i 를 ++ 시키면서 arr 을 순회하는 반복문으로 만들었습니다.

아까 선언했던 첫 문자 x 가 arr 의 문자와 같은지 다른지 체크합니다. 같으면 equal_cnt 를 ++, 다르면 diff_cnt 를 ++ 합니다. 

그리고 equal_cnt 와 diff_cnt 가 같은지 체크합니다. 같지 않으면 i++ 하여 다시 체크합니다.

만약 equal_cnt 와 diff_cnt가 같다면,

2-1. answer을 ++ 해줍니다.

2-2. sliced 에 arr 을 이전에 잘랐던 인덱스(sliced_index) 부터 현재 자를 인덱스(i+1) 까지 잘라 push 합니다.

2-3. equal_cnt 를 0으로, diff_cnt 를 0으로 초기화 해줍니다. 

2-4. 이 다음 비교를 위해 x 에 현재 자른 인덱스의 문자를 넣어 줍니다. 

 

if(sliced_index == arr.length) {
        return answer;
    } else {
        return ++answer;
    }

3. for문이 종료되고 마지막으로 자른 인덱스(sliced_index) 와 arr 의 길이를 비교합니다. 

같으면 answer 을 반환합니다.

다르면 마지막으로 자른 인덱스 뒤에 한 벌 남은 문자들이 존재하므로 ++ answer 을 해주어 반환합니다. 

 

::

급하게 javascript 로 코테를 볼 기회가 생겨서 문자열 다루는 방법 연습 삼아 풀어보았습니다!

 

 

728x90
반응형