프로그래머스 Level1 문자열 나누기 (python)

한승현·2022년 12월 26일
0

programmers

목록 보기
3/22
  • https://school.programmers.co.kr/learn/courses/30/lessons/140108
  • 문제설명
    • 문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
    1. 첫글자를 x로 설정한다.
    2. 왼쪽부터 x와 같은 문자인 개수와 아닌 문자의 개수를 센다.
    3. x와 같은 문자의 개수와 x와 다른 문자의 개수가 같다면 지금까지의 문자열을 분리하고 1번으로 돌아간다.
    4. 두 횟수가 다르지만 더 이상 읽을 문자가 없다면 마지막으로 분리하고 끝낸다.
  • 제한사항
    • 1 ≤ s의 길이 ≤ 10,000
    • s는 영어 소문자로만 이루어져 있습니다.
  • 코드
    def solution(s):
        answer = 0
        cnt = [0, 0]  # [x의 개수, x가 아닌 글자들의 갯수]
        cur = 0
        while True:
            flag = False
            for i in range(cur, len(s)):
                if cnt[0] == cnt[1] and cnt[0] != 0:
                    answer+=1
                    cnt = [0,0]
                    cur = i
                    break
                if s[cur] != s[i]:
                    cnt[1] += 1
                else:
                    cnt[0] += 1
                if i == len(s)-1:
                    flag = True
            if flag:
                break
        return answer+1
  • 풀이
    • Level1문제인데도 문제해석이 약간 어려운 문제였다. 재귀로 풀기엔 s의 길이제한때문에 몇천번이 나올 수 있기 때문에 while문으로 해결해야 한다.
    • 마지막으로 분리하는 부분은 결국 횟수가 같으면서 분리하는 것과 다르지만 분리하는 것 둘 다 횟수를 더하고 끝내야 하는 건 같기 때문에 마지막에 횟수를 +1하여 끝낸다.
profile
사람을 만족시켜줄 수 있는 개발자

0개의 댓글