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

김멉덥·2023년 8월 5일
0

알고리즘 공부

목록 보기
79/171
post-thumbnail
post-custom-banner

문제

프로그래머스 연습문제


코드 구현

def solution(s):
    answer = 0

    # 첫글자 = x
    # x와 같은 글자 수 == x가 아닌 글자 수 -> 분리
    # 기존 문자열에서 분리된 부분 제거 -> 반복

    same_s, diff_s = 0, 0   # 같은 글자 수, 다른 글자 수
    ans = []                # 분리되는 문자열을 담을 배열

    x_index = 0         # x의 인덱스를 담을 변수
    x = s[x_index]      # 초기 x값은 맨 첫번째 문자로 설정

    for i in range(0, len(s)):
        # 같은 글자 수, 다른 글자 수 세기
        if (x == s[i]):
            same_s += 1
        if (x != s[i]):
            diff_s += 1

        # 두 글자 수가 같으면 -> 분리
        if (same_s == diff_s):
            ans.append(s[x_index : i + 1])      # x부터 i까지 분리하고
            x_index = i + 1         # x는 분리된 이후의 문자열에서의 첫번째 글자

            if (x_index + 1 >= len(s)):     # 만약 거의 다 분리되어서 이제 남아있는 인덱스를 넘어가면
                ans.append(s[x_index:])     # 지금까지 읽은 문자열을 분리하고 종료
                break

            x = s[x_index]              # x 재설정
            same_s, diff_s = 0, 0       # 초기화

        # 두 글자 수가 다르지만, 더 이상 읽을 글자가 없으면
        if(same_s != diff_s and i+1 >= len(s)):
            ans.append(s[x_index:])     # 지금까지 읽은 문자열을 분리하고 종료
            break

    ans = list(filter(None, ans))       # 리스트 내 '' 같은 공백 제거
    answer = len(ans)                   # 분리된 문자열이 담긴 배열의 길이가 정답
    return answer

풀이

  • 처음에 문제 중 이 조건을 읽지 못해서 테스트케이스를 계속 틀렸었다..
    • 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
  • 글자 수를 같은지 다른지 센다.
    • 두개의 값이 같으면 → 분리 진행 → 분리 이후 x값 재설정
      • → 근데 x + 1이 인덱스를 넘어갈만큼 끝부분 글자면 → 남은 문자열 분리해서 넣고 종료
    • 두개의 값이 다르지만, 더 이상 읽을 글자가 없다면 → 남은 문자열을 넣고 종료

What I learned

다른 사람 정답 코드

def solution(s):
    answer = 0
    sav1=0
    sav2=0
    for i in s:
        if sav1==sav2:
            answer+=1
            a=i
        if i==a:
            sav1+=1
        else:
            sav2+=1
    return answer

이런 . . . 내가 너무 복잡하게 푼 것 같기도 하다 . . . ( ◠‿◠ )

▶️ 리스트이름 = list(filter(None, 리스트이름))
참고 : https://jinmay.github.io/2019/06/30/python/python-how-to-delete-empty-string-in-list/

sample_list = ['', 'a', '', 'abc', 'qdsf']
sample_list = list(filter(None, sample_list))

>>> ['a', 'abc', 'qdsf']
profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글