프로그래머스/파이썬

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

오월&절미 2021. 1. 15. 13:57

[문제 설명]

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


[제한 사항]

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야 합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

... if문을 한 줄로 ...

def solution(s):
    s_split = s.split(" ") 
    answer = [] 
    for word in s_split:
        new_word = '' 
        for i in range(0, len(word)):
            new_word += word[i].upper() if i%2 ==0 else word[i].lower()            
        answer.append(new_word)         
    return ' '.join(answer) 

 

... 혼자 스스로 만들었지만 실패 ...

"""
string.replace() 는 원본 string을 바꿔주는 게 아니다!!
문제를 풀면서 문자열안에 있는 문자를 직접 바꾸고 싶어 s.replace()를 시도했는데 잘 안됐다. s.replace(i, i.upper()) 왜 안되는 거지?.?

찾아보니 replace()는 원본 문자열을 바꿔주는 게 아니라 값을 바꾼 새로운 문자열을 반환하는 함수였다. 
즉 s.replace(i, i.upper())를 하면 s 원본이 아닌 다른 새로운 문자열을 반환하는 것...!!! 그래서 안됐던 거였음
"""

def solution(s):
    s = s.upper()
    s_split = s.split(' ') # 공백으로 단어를 구분했기 때문에 공백으로 문자열을 나눠준다.
    
    for i in range(0, len(s_split)):
        for j in range(0, len(s_split[i])):
            if j %2 == 1 :
                s_split[i] = s_split[i].replace(s_split[i][j], s_split[i][j].lower())
            else :
                s_split[i] = s_split[i].replace(s_split[i][j], s_split[i][j].upper())
                
    answer = ' '.join(s_split)            
    return answer