Algorithm/1일 1코테

[프로그래머스 Python] 이상한 문자 만들기

대인보우 2020. 9. 23. 12:51
반응형

문제

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

입출력 예시

 

내 답

def solution(s):
    answer = ''
    
    a = s.split()
    
    for word in a:
        for j in range(len(word)):
            if j%2 == 0:
                answer += word[j].upper()
            else:
                answer += word[j].lower()
        answer += ' '

    return answer[:-1]

 

알고리즘

1. 공백을 기준으로 answer을 나눠준다. (try, hello, world)로 나뉨

2. 짝수면 대문자, 홀수면 소문자로 answer에 append, 한 단어가 끝나면 공백을 넣어줌

3. 그러면 마지막단어도 공백이 붙으므로 -1해서 출력

4. 근데 실패함 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ정확도 30퍼나옴

 

그래서 비슷한 다른 답을 찾아보았는데 알고리즘은 다들 비슷했다!

원인은

 

s.split()이었다!!!!!!!!!!!

아무것도 안넣으면 공백으로 나누어지는 줄 알았는데!!!!!!

 

this-programmer.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC3python3%EC%97%90%EC%84%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%9E%90%EB%A5%B4%EB%8A%94-%ED%95%A8%EC%88%98-split%EA%B3%BC-split-%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

이런이런 차이가 있다고 한다. 

사실 저거 봐도 왜 안됐는지 아직 잘 이해못함;;

 

어쨌든 다음과 같이 수정해서 성공했다

 

수정 답

def solution(s):
    answer = ''
    a = s.split(' ')

    for word in a:
        for j in range(len(word)):
            if j%2 == 0:
                answer += word[j].upper()
            else:
                answer += word[j].lower()
        answer += ' '

    return answer[:-1]

 

다른사람 풀이

def toWeirdCase(s):
    # 함수를 완성하세요
    return ' '.join([''.join([c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(w)]) for w in s.split()])

 

 

반응형