이상한 문자 만들기
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s return "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
def solution(s):
answer = ''
arr = []
arr = s.split()
for str in arr:
for i in range(len(str)):
if i%2 == 0:
answer += str[i].upper()
else:
answer += str[i].lower()
answer += ' '
return answer[:-1]
arr
에 입력된 문자열 s를 split()
을 사용해서 공백 기준으로 나누고 for
문을 돌려서 index가 짝수면 대문자로, 홀수면 소문자로 변환하도록 해서 answer에 추가했다. 공백은 마지막에 한번 더 추가되기 때문에 return
값은 answer[:-1]
로 해준다.
하지만 생각보다 조금 맞고 많이 틀림 ,,, 🥲 오늘도 눈물만 흘린다 주륵주륵,,,
왜 안되는건지?? 도저히 감이 안잡혔다. 그래서 힌트가 있길래 보니까
이렇게 말하고 있더라,, 솔직히 좀 이해가 안간다. 코딩 능력을 보는 코딩테스트 인데 꼭 저렇게 말장난 같은 지문을 잘 읽어봐라! 를 내야하는지,,, 그런건 좀 비문학에 가깝지 않나?
ㅎㅎ; 어쨌든 공백을 잘 생각해보라니까 잘 생각해봐야겠죠,, 어쨌든 이제까지 코딩테스트를 풀면서 느끼는거 (특히 프로그래머스 쪽)
입출력 예만 보고 생각하면 절대 다 맞을수가 없다
그래서 내가 왜 틀렸다고? 답은 의외로 간단했다.
파이썬에서 spilt()
을 인자 없이 사용하게 되면 여러개의 공백이 있는 것도 하나의 공백으로 취급하고, 시작과 끝에 오는 공백은 무시하게 된다. 따라서 split()
이 아니라 split(" ")
과 같이 공백을 문자열 안에 넣어야 공백을 하나하나씩 취급하게 된다.
결국 파이썬 라이브러리의 사용법을 더 잘 알았어야 했다는 소리. 더 열심히 하자.
def solution(s):
answer = ''
arr = []
arr = s.split(" ")
for str in arr:
for i in range(len(str)):
if i%2 == 0:
answer += str[i].upper()
else:
answer += str[i].lower()
answer += ' '
return answer[:-1]
기존의 코드에서 split()
에 인자만 넣어줬다. 그랬더니 백점~
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(" ")))
와우... 코드를 줄이는걸 좋아하긴 하지만 그래도 이런식으로는 안쓸것 같다. 어느정도의 가독성은 있어야 한다고 생각하기 때문에... 하지만 정말 대단하긴 하다!
lambda
랑 enumerate
를 어떻게 사용했는지도 알아보면 좋겠다.