티스토리 뷰

 

2022.12.06

프로그래머스 스쿨 Lv01. 문자열 나누기


 

프로그래머스

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

programmers.co.kr

 

🚀 문제 파악

*문자열의 첫 글자 = x
*x와 x가 아닌 글자가 나온 횟수를 센다
*두 횟수가 동일한 순간 멈추고, 지금까지 읽은 문자열을 분리한다
*남은 문자열에 대해 이 과정을 반복한다
*남은 부분이 없을 때 종료한다
*이 과정을 반복했을 때, 분해한 문자열의 개수를 return 한다

 

 

🚀 문제 해결

1. 첫번째 문자를 stack에 넣는다.

2. 문자열 s에서 첫 번째 문자를 제거한다.

3. 그 다음 문자를 stack[0]과 비교한다

   *그 다음 문자와 stack[0] 이 동일하면 stack에 push

   *그 다음 문자와 stack[0] 이 다르면 stack에서 pop

4. stack의 길이가 0이 될 때마다 answer에 +1 한다

5. 최종 문자열 s의 길이가 0이 아닌경우 answer에 +1 한다 

 

*정리하면

**stack이 비어있는 경우 첫번째 문자이므로 stack에 push 한다

**stack이 비어있지 않은 경우 stack[0]과 비교해서 같은 문자일 때 push 한다

**stack이 비어있지 않은 경우 stack[0]과 비교해서 다른 문자일 때 shift 한다

**stack이 비어있는 경우는 x와 x가 아닌 경우의 횟수가 동일하므로 answer에 +1 한다

 

 

🚀 통과 코드

function solution(s) {
    var answer = 0;
    var stack = [];

    while(s.length > 1){
        var now = s.substr(0, 1);
        s = s.slice(1);
        
        if(stack[0] == now || stack.length == 0) stack.push(now);
        else stack.shift();

        if(stack.length == 0) answer+=1;
    }
    return s.length == 1 ? answer+=1 : answer;
}

 

 

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday