JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
s | return |
---|---|
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
def solution(s):
answer = ''
for character in s:
if not len(answer) or answer[-1] == ' ':
answer += character.upper()
else:
answer += character.lower()
return answer
파이썬은 str
의 upper()
와 lower()
메서드를 통해 대소문자로 쉽게 변환할 수 있다. 또한 해당 문자가 알파벳이 아닌 경우는 에러가 나지 않고 그대로 반환되니 따로 에러 처리를 하지 않아도 된다는 장점이 있다.
그렇다면 언제 upper()
를 사용하고, 언제 lower()
를 사용해야 하는지를 구분하는 것이다.
upper()
를 사용해야 할 때는 다음 두 가지로 나눌 수 있다.
answer
가 빈 문자열일 때
이때는 s
의 첫 문자를 가져올 때를 의미한다. 이때는 해당 문자가 알파벳이 아니라면 그냥 넣으면 되지만 알파벳이라면 반드시 대문자로 변환하여 넣어야 하므로 이 경우 upper()
메서드를 사용해야 한다.
answer
의 가장 마지막 문자가 공백 문자일 때
이 경우, 앞에 넣던 단어가 끝나고 공백이 들어갔다는 것을 의미한다. 그렇다면, 자신은 새로운 단어의 시작이 된다.
이때 자신이 알파벳이 아니라면 그냥 넣어도 되지만 알파벳이라면 대문자로 변환해야 하므로 upper()
메서드를 사용해야 한다.
이 두 경우를 제외하고 나머지는 모두 lower()
메서드를 사용하면 된다.
def solution(s):
answer = ''
for i in s.split(' '):
i = i.lower()
i = i.capitalize()
answer += i +' '
return answer[:-1]
split()
메서드를 사용할 때 split()
으로 하면 " ABC"의 경우 ["ABC"]
로 반환되지만 split(' ')
으로 하면 [" ", "ABC"]
로 반환된다.
split()
메서드에 인자를 주지 않으면 자동으로 화이트 스페이스를 기준으로 나눠주는 것으로 알고 있었는데, 이런 차이가 있다는 점을 알게 되었다(그나저나 왜 저런 차이가 있는 걸까?).