본문 바로가기

알고리즘/python

[python/파이썬] 프로그래머스 Lv.1 문자열 나누기

반응형

[문제 출처]

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

 

프로그래머스

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

programmers.co.kr

 

 

[문제 풀이]

 

주어진 문자열 s를 첫 글자부터 읽는다. 첫 글자를 x라고 할 때,

문자열을 계속해서 읽으면서 x의 개수와 x가 아닌 문자의 개수가 같아지는 순간에 문자열을 분리한다.

그 후 분리한 다음 글자를 x로 하고 이전의 과정을 반복한다.

이렇게 해서 몇 개의 문자열로 분리되는지 구하는 문제이다.

 

만일 x와 x가 아닌 문자의 개수가 동일하지 않은 상태에서 더 이상 남은 문자가 없어서 끝난 경우에도 분리하도록 한다.(문자열의 개수가 증가)

 

 

a(x의 개수), b(x가 아닌 문자의 개수)로 두고, 주어진 문자열을 처음부터 읽으면서 x와 동일할 경우 a를, 그렇지 않을 경우는 b를 증가시킨다.

증가시킨 후에, a와 b가 같다면 문자열을 분리해 준다.

문자열의 개수를 나타내는 answer을 증가시키고, x를 변경해 주기 위해서 change변수를 1로 변경해 준다.

 

모든 문자를 다 읽은 후에 a와 b가 같지 않다면 분리되지 않은 것이지만, 이런 경우에도 분리해야 하기에 1을 증가시킨다.

(분리된 경우 a와 b가 0으로 바뀌기에 두 수는 같아짐)

 

✅소스 코드

def solution(s):
    answer = 0
    x = s[0]
    a = 0 
    b = 0
    change = 0
    for i in s:
        if change == 1:
            change = 0
            x = i
        if x == i:
            a += 1
        else:
            b += 1
        
        if a == b: 
            change = 1
            answer += 1
            a = 0
            b = 0
    if a != b:
        answer += 1
                  
    return answer
반응형