본문 바로가기

코딩 테스트/프로그래머스

[Python] 프로그래머스 lv.0 세 개의 구분자

 

실패...

다른 사람 코드 1

def solution(myStr):
    s = myStr.replace('b', 'a')
    s = s.replace('c', 'a')
    s = s.split('a')
    answer = []

    for x in s :
        if x : # x가 빈 문자열이 아니면
            answer.append(x)
    if not answer : # answer가 빈문자열이면 즉, s가 빈문자열만 있어서 아무것도 추가되지 않았다면 
        return ["empty"] # empty 반환
    return answer

 

다른 사람 코드 2

def solution(myStr):
    answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
    
    return answer if answer else ['empty']
  • myStr 에서 'a', 'b', 'c' 를 공백(' ')으로 대체
  • split( ) : 공백을 기준으로 분리하여 list 생성
  • [x for x in ... if x] : 리스트 comprehension을 사용하여, split()으로 생성된 리스트에서 빈 문자열('')이 아닌 요소만 필터링
    • 조건 if x 는 문자열 x가 빈 문자열이 아닐 때만 참

 

다른 사람 코드 3

import re

def solution(myStr):
    answer = [m for m in re.split('a|b|c', myStr) if m]

    if len(answer) == 0 :
        answer = ['empty']

    return answer

 

1. re.split('a|b|c', myStr)

  • 정규식을 사용하여 문자열 myStr을 'a', 'b', 'c'로 나누어 분리합니다.
  • 'a|b|c'는 'a' 또는 'b' 또는 'c'를 기준으로 분리하라는 정규식입니다.
  • re.split은 기준 문자(여기서는 'a', 'b', 'c')를 제거하고 나머지 부분을 리스트로 반환합니다.
  • 예시:
    • 입력: "abcda"
    • 결과: ["", "", "", "d", ""] (빈 문자열 포함).

2. [m for m in re.split('a|b|c', myStr) if m]

  • 리스트 컴프리헨션을 사용하여 re.split 결과 리스트에서 빈 문자열("")을 제외합니다.
  • 조건 if m은 문자열 m이 빈 문자열이 아닌 경우에만 m을 결과 리스트에 포함시킵니다.
  • 예시:
    • 입력 리스트: ["", "", "", "d", ""]
    • 결과: ["d"].

3. if len(answer) == 0:

  • answer 리스트가 비어 있는지 확인합니다.
  • 파이썬에서 빈 리스트의 길이는 0이므로, len(answer) == 0 조건이 참이면 answer에 ["empty"]를 할당합니다.
  • 예시:
    • answer = [] → answer = ["empty"].

4. return answer

  • 최종적으로 answer 리스트를 반환합니다.
  • answer가 비어 있지 않다면 answer를 그대로 반환하고, 비어 있다면 ["empty"]를 반환합니다.