코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 1 이상한 문자 만들기

_알파카 2024. 8. 8. 11:35
728x90

문제 설명

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

 

프로그래머스

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

programmers.co.kr

문자열을 조건에 따라 처리하는 문제이다. 

 

첫 풀이 (오답)

어렵지는 않은 문제였지만, 처음에 오답이 났다ㅠ

def solution(s):
    answer = ''
    # 공백을 기준으로 문자를 나눠 리스트에 저장
    words = s.split(' ')
    for word in words:
        for w in range(len(word)):
            # 홀수번쨰 알파벳은 소문자로 변경
            if w % 2 != 0:
                answer += word[w].lower()
            
            # 짝수번쨰 알파벳은 대문자로 변경
            else:
                answer += word[w].upper()
        
        # 마지막 글자가 아니면 공백 추가
        if word != words[-1]:
            answer += ' '

    return answer

 

 

아무리 생각해봐도 틀린 부분이 없어보여 정답을 참고했다. 

 

정답 풀이

가장 의심스러웠던, 마지막 공백 추가 부분에 오류가 있었다. 

def solution(s):
    answer = ''
    # 공백을 기준으로 문자를 나눠 리스트에 저장
    words = s.split(' ')
    for word in words:
        for w in range(len(word)):
            # 홀수번째 알파벳은 소문자로 변경
            if w % 2 != 0:
                answer += word[w].lower()
            
            # 짝수번째 알파벳은 대문자로 변경
            else:
                answer += word[w].upper()
        
        # 공백 추가
        answer += ' '
    # 마지막 단어에도 공백이 추가되므로, 마지막 공백 제거하고 반환
    return answer[:-1]



왜냐하면 처음 작성한 코드는 마지막 단어가 아닌 경우에만 공백을 추가하는 방식이기 때문에

연속된 공백이 있는 경우 이를 제대로 처리하지 못하기 때문이다. 

문제에서는 "각 단어는 하나 이상의 공백문자로 구분되어 있습니다."

라고 명시하고 있다. 

따라서, 공백이 여러 개가 존재할 수도 있다. 

 

예를 들어, 공백을 &로 표시해보겠다.

"try&&hello&&world"

라는 문자열이 주어졌다고 가정해보자. 

이는 split(' ') 이후 

words = ['try', '' , 'hello', '', 'world'] 가 된다. 

 

이 때, 주어진 조건에 따르면 빈 문자열에도 공백을 추가해야 하기 때문에, 

나의 첫 번째 코드는 틀렸던 것이다. 

 

728x90