간단한 문제처럼 보였지만... 단어마다의 짝수랑 홀수를 정의해주어야 했고, 단어들 사이의 공백에 대한 문제도 있어서 꽤나 여러 시도를 했던 문제이다.
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문을 만들어준다.
만약 j가 2로 나누어 떨어진다면 i의 j번째 문자를 대문자로, 나누어 떨어지지 않는다면 i의 j번째 문자를 소문자로 만들어주고 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)
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 자연수 뒤집어 배열로 만들기> Level 1 - 파이썬 (0) | 2020.11.19 |
---|---|
<프로그래머스 문제풀이: 자릿수 더하기> Level 1 - 파이썬 (0) | 2020.11.18 |
<프로그래머스 문제풀이: 약수의 합> Level 1 - 파이썬 (0) | 2020.11.16 |
<프로그래머스 문제풀이: 내적> Level 1- 파이썬 (0) | 2020.11.15 |
<프로그래머스 문제풀이: 시저 암호> Level 1 - 파이썬 (0) | 2020.11.14 |