Python

[Python/프로그래머스] 12930_이상한 문자 만들기 - [ a if x조건 else b for x in 리스트 ]

SDeveloper 2020. 4. 2. 22:00
반응형

 

 

[문제]

문제 설명

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

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

s

return

try hello world

TrY HeLlO WoRlD

입출력 예 설명

try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 따라서 TrY HeLlO WoRlD 를 리턴합니다.

 

 

[1차 풀이]

- 단어 마다 split 하여 index를 검색한다.

 

def solution(s):
    answer = ''
    word = s.lower().split(" ")
    for w in word:
        for i, x in enumerate(w) :
            if i % 2== 0 : 
                answer += x.upper()
            else :
                answer += x
        answer += " "
    return answer

 

 

[2차 풀이]

- for문을 한번만 쓰고도 가능 할 것 같아서 수정해 보았다. 

- if문과 elif문을 합칠 수 있을 것 같다.

 

  def solution(s):
    answer = ''
    idx = 0
    for c in s:
        if c == " ":
            idx=0
            answer += " "
        elif idx == 0 :
            answer += c.upper()
            idx=idx+1
        else:
            answer += c.lower()
            idx=0
    return answer

 

[3차 풀이]

- 대문자, 소문자 등 케이스가 두가지인 경우는 처음 시작할 떄 하나의 케이스로 변경 후 작업하면 코드를 줄일 수 있다.

 

  def solution(s):
    answer = ''
    idx = 0
    for c in s.lower():
        if idx == 0 :
            answer += c.upper()
            idx=idx+1
        else:
            answer += c
            idx=0
    return answer

 

[4차 풀이]

- 1차 풀이의 답을 for ~ if ~ else 문을 줄여보자

- 그 동안 [ a if ~ else b for x in ~] 과 같은 구문을 잘못 이해하고 있었다.

 

 

def solution(s):
    word = s.lower().split(" ")
    return ' '.join([ ''.join([ x.upper() if i % 2 == 0 else x for i, x in enumerate(w)]) for w in word ]) 

 

 

[링크]

https://programmers.co.kr/learn/courses/30/lessons/12930

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

반응형