나의 풀이
def solution(s):
answer = ''
x = 0
for i in s :
if i == ' ' :
answer += ' '
x = 0
elif x %2 == 0 :
answer += i.upper()
x += 1
else :
answer += i.lower()
x += 1
return(answer)
처음에는 공백을 기준으로 문자열을 나눠서 리스트를 순회하는 식으로 로직을 짜고,
하나의 단어를 다 돌고나면 공백 하나를 추가하도록 하였다.
그러나 공백이 한 개가 아니라 그 이상일 경우를 고려하지 못했기 때문에 실패하였다.
따라서 모든 문자 하나하나를 돌면서, 공백을 만나면 새로운 단어로 인지하는 x변수를 추가하였다.
다른 풀이
def toWeirdCase(s):
return ' '.join([''.join([c.upper() if i % 2 == 0 else c.lower()
for i, c in enumerate(w)]) for w in s.split(' ')])
괄호가 많고 복잡해보이지만 차근차근 작성한다면 오히려 쉬운 코드!
s.split(' ') 에 의해 "try hello world" 문자열이 " " 기준으로 나눠진 리스트가 된다.
그 형태는 ['try', '', '', '', 'hello', 'world'] 와 같을 것이다.
이러한 리스트를 for문으로 돌면서 각 원소를 w라고 칭한다.
w -> 'try' / '' / '' / '' / 'hello' / 'world'
enumerate(w) 를 통해 각 단어의 원소들을 c, 단어의 인덱스를 i라고 칭하며
짝수문자라면 upper() 을, 홀수문자라면 lower() 으로 변환하는 작업을 거친다.
변환된 각 문자들은 리스트화되었지만, 이를 ''.join 을 통해 단어 문자열로 변환한다.
ex) ['T','r,',Y']-> "TrY"
이제 다시 각 단어들이 원소로 존재하는 리스트를 문자열로 변환해야 한다.
현재는 ['TrY', '', '', '', 'HeLlO', 'WoRlD'] 와 같은 리스트형태이다.
이를 위해 마지막에 ' '.join() 을 함으로써 각 리스트원소들을 합칠 때 공백을 추가하게 되었다.
def toWeirdCase(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper()
for i, a in enumerate(x)]), s.split(" ")))
'알고리즘 > 이것저것' 카테고리의 다른 글
[프로그래머스] 시저 암호 - 파이썬(python) (0) | 2022.09.03 |
---|---|
[프로그래머스] 약수의 합 - 파이썬(python) (0) | 2022.09.03 |
[프로그래머스] 자릿수 더하기 - 파이썬(python) (0) | 2022.09.02 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 - 파이썬(python) (0) | 2022.09.02 |
[프로그래머스] 정수 내림차순으로 배치하기 - 파이썬(python) (0) | 2022.09.02 |
댓글