toWeirdCase함수는 문자열 s를 매개변수로 입력받습니다. 문자열 s에 각 단어의 짝수번째 인덱스 문자는 대문자로, 홀수번째 인덱스 문자는 소문자로 바꾼 문자열을 리턴하도록 함수를 완성하세요. 예를 들어 s가 “try hello world”라면 첫 번째 단어는 “TrY”, 두 번째 단어는 “HeLlO”, 세 번째 단어는 “WoRlD”로 바꿔 “TrY HeLlO WoRlD”를 리턴하면 됩니다.

주의 : 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단합니다.

문제 보러가기


코드 및 풀이

초반에는 replace()를 사용하려고 했었는데, replace()는 인덱스에 상관없이 문자열 자체에 같은 문자가 있으면 일괄 변환시켜버렸다.

s = 'try hello world'
a = s.split()
answer = []
for i in a:
    for j in range(len(i)):
        if j & 1 == 0:
            i = i.replace(i[j], i[j].upper())
        else:
            i = i.replace(i[j], i[j].lower())
    answer.append(i)
    
p = ' '.join(answer)
print(p)
# TrY HellO WoRlD


문자열을 단어 단위로 쪼개서 반복문으로 짝수 인덱스만 대문자화한 다음 합치는 방식을 사용하였다.

그래서 작성한 코드는 다음과 같다.

def toWeirdCase_1(s):
    answer = []
    for i in s.lower().split():
        for j in range(0, len(i)):
            if j % 2 == 0:
                i = i[:j] + i[j].upper() + i[j+1:]
        answer.append(i)
    return ' '.join(answer)

toWeirdCase_1(s="hello world")
# 'HeLlo WoRlD'


다음 코드는 리스트 컴프리헨션과 enumerate()를 사용하여 한 줄로 작성한 것이다.

단어 단위로 리스트에 저장한 다음 또 단어마다 글자를 돌면서 짝수 인덱스를 대문자화(upper())시킨다. 홀수 인덱스는 이미 대문자일 수도 있으므로 소문자화(lower())시킨다.

그리고 해당 단어들을 공백 기준으로 합치면 원하는 형태의 문자열이 출력된다.

def toWeirdCase_2(s):
    return ' '.join([''.join([j.upper() if i % 2 == 0 else j.lower() for i, j in enumerate(a)]) for a in s.split()])

print(toWeirdCase_2("try new hello world"))
# TrY NeW HeLlO WoRlD



Julia Hwang

디발자를 꿈꾸는 웹개발자의 블로그입니다.