[코딩테스트] 프로그래머스 - 이상한 문자 만들기

Jenna·2023년 3월 30일
0

Programmers

목록 보기
5/7
post-thumbnail

이상한 문자 만들기

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

sreturn
"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(" ")))

와우... 코드를 줄이는걸 좋아하긴 하지만 그래도 이런식으로는 안쓸것 같다. 어느정도의 가독성은 있어야 한다고 생각하기 때문에... 하지만 정말 대단하긴 하다!
lambdaenumerate를 어떻게 사용했는지도 알아보면 좋겠다.

profile
FE/Game Dev.

0개의 댓글