본문으로 바로가기

Python의 Strip()은 재귀 호출

category Language/Python 2021. 6. 7. 22:37
728x90
반응형

프로그래머스의 Level 01 문제 중 `이상한 문자열 만들기`에 도전했다. Level 01 임에도 불구하고 3~4시간을 삽질하며 이런저런 시도를 해봤다.

    for idx in s.split(" "):
        for index, value in enumerate(idx):
            if index % 2 == 0:
                answer += value.upper()
            else:
                answer += value.lower()
        answer += " "
    return answer.rstrip()

문제 설명을 보고 위와 같이 로직을 세우고 제출했다. 결과는 실패다. 문자열에 + 연산을 해주는 게 문제일까? 뭐가 문제일까 하면서 answer를 string 객체가 아닌 list로 만들고 append를 통해서도 사용해보고 하면서 enumerate 보다 range를 이용해서 푸는 걸 추천한다는 글을 발견해서 다음과 같이 코드를 변경했다.

def solution(s):
    answer = str()
    for string in s.split(" "):
        for i in range(len(string)):
            if (i % 2) == 0:
                answer += string[i].upper()
            else:
                answer += string[i].lower()
        answer += " "

    return answer.rstrip()

위 코드의 결과는 똑같이 실패다. 뭐가 문제지 하면서 다시 한 두시간 정도 검색 도중. 문득 strip()에 관련된 메서드에 문제가 있는 게 아닐까 하는 생각이 스쳐 지나갔다. 검색 결과 strip()은 재귀적으로 호출하며 문자를 지워나간다는 글을 발견했다. 

결과적으로 처음 작성했던 코드를 다음과 같이 변경했다.

def solution(s):
    answer = ""
    # pythonic 스타일
    for idx in s.split(" "):
        for index, value in enumerate(idx):
            if index % 2 == 0:
                answer += value.upper()
            else:
                answer += value.lower()
        answer += " "
    return answer[:-1]

결과는 충격적이게도 통과였다. 운 좋게 발견한 글에서 strip()이 재귀 호출이라는 점을 발견해 풀었지만 함수의 동작 방식은 앞으로 한 번씩 찾아보면서 사용하는 것이 도움이 되지 않을까

728x90
반응형