출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

간단한 문제처럼 보였지만... 단어마다의 짝수랑 홀수를 정의해주어야 했고, 단어들 사이의 공백에 대한 문제도 있어서 꽤나 여러 시도를 했던 문제이다.

def solution(s):
    word = s.split(' ')
    new_string = []
    for i in word:
        for j in range(len(i)):
            if j%2==0:
                new_string.append(i[j].upper())
            else:
                new_string.append(i[j].lower())
        new_string.append(' ')
    del new_string[-1]
    return ''.join(new_string)

여기서 우선 s.split(' ')을 통해 word에 이를 정의한다. 이렇게 할 경우, 하나의 공백은 무시되고 단어로 분리되지만, 여러 개의 공백은 같은 양의  빈 문자열('')로 추가된다.

new_string이라는 리스트를 정의해준다

word라는 리스트 안에 있는 각각의 단어를 i라고 정의를 해주기 위해 for문을 돌리고,

이 각각 단어의 길이를 정의하기 위해 j를 통해 이중 for문을 만들어준다.

만약 j2로 나누어 떨어진다면 ij번째 문자를 대문자로, 나누어 떨어지지 않는다면 ij번째 문자를 소문자로 만들어주고 new_string 리스트에 추가해준다.

다음에는 new_string에 공백(' ')을 추가해준다. 빈문자열이 여러개여도, 마지막에 공백을 추가해주는 장치 덕분에 이러한 문제는 해결이 된다.

마지막으로는 new_string의 마지막 item인 공백 문자열을 삭제해준다. (이는 애초에 없던 공백 문자열이다)

 

 

※ 다른 사람의 풀이

다음은 프로그래머스에서 가장 많은 좋아요를 받은 풀이이다:

def solution(n):
	return ' '.join([''.join([b.upper() if a%2 == 0 else b.lower() for a, b in enumerate(w)]) for w in s.split(' ')])

역시 풀이는 숏코딩으로 할 수 있으면 숏 코딩으로 해야 멋있는 듯 하다. 결국 이 코드도 내가 쓴 코드랑 비슷한 느낌은 있지만, 이렇게 숏코딩으로 구현해내기는 어려운 듯 하다. 이를 풀어쓰면 이런 느낌일 것이다:

def solution(s):
    sentence_list = []
    for w in s.split(' '):
        word_list = ''
        for a, b in enumerate(w):
            word_list += ''.join(b.upper() if a%2 == 0 else b.lower())
        sentence_list.append(word_list)
    return ' '.join(sentence_list)