문자열은 리스트처럼 인덱싱하여 값을 변경하는 것이 불가하다. 그렇다고 replace() 함수를 사용하면 중복되는 문자들이 모두 변경되기 때문에 사용하지 않기로 했다. 그래서 문자열을 traverse하며 문자 하나씩 대소문자를 설정해 answer = ''에 저장하도록 했다.
def solution(s):
answer = ''
ss = s.split(' ')
for i in range(len(ss)-1):
answer += ss[i][0].upper()
answer += ss[i][1:].lower()
answer += ' '
answer += ss[-1][0].upper()
answer += ss[-1][1:].lower()
return answer
그런데 제출을 해보니 많은 테스트케이스에서 런타임에러를 얻었다.
def solution(s):
ss = s.split(' ')
answer = [
word[0].upper() + word[1:].lower() for word in ss
]
answer = ' '.join(answer)
return answer
위 코드도 마찬가지고, 다양하게 코드를 변형해 봐도 결과는 같았다. 그래서 문제를 다시 잘 읽어 보았다.
공백문자가 연속해서 나올 수 있습니다.라고 되어 있다. 그래서 테스트케이스를 추가하고 다시 풀어봤다.

def solution(s):
ss = s.split(' ')
answer = [
word[0].upper() + word[1:].lower() if word else '' for word in ss
]
answer = ' '.join(answer)
return answer
드디어 정답! 질문하기 게시판을 보니 다들 비슷한 문제로 정답을 얻지 못하고 있었다. 문자열 맨앞에 공백이 있는 경우도 고려해 보라는 조언도 있었다.