[test] 이상한 문자 만들기 - 파이썬

joygoround·2020년 5월 2일
0

Coding Test

목록 보기
34/42

Q.

[문제 설명]
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
[제한 사항]
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

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

My sol.


def solution(s):
    words_list = s.split() 
    new_list = []
    for word in words_list: 
        new_words = ""
        for i in range(len(word)):
            new_words += word[i].upper() if i%2 == 0 else word[i].lower() 
        new_list.append(new_words)
    return " ".join(new_list)

단어별, 철자별로 반복할 때,
빈 스트링에 철자하나씩 넣어주고
한 단어 끝나면 빈 리스트에 단어 넣어주기



  1. 받은 문자열을 단어별(스페이스 기준)으로 split 해서 list에 넣어주기

    words_list = s.split(' ')

  2. 문자열을 새로 만들어야 하니까 빈 리스트 생성

    new_list = []

  3. 단어 리스트에 있는 단어들 반복할 때 그 단어 길이 만큼 반복문
    for word in words_list:
    for i in range(len(word)):

3-1 단어가 반복할 때 맞춰서 빈 string이 채워지는 거니까 여기에 맞게 빈스트링 미리 만들기
new_words = ""

  1. letter가 짝수면 대문자 홀수면 소문자로 바꿔서 빈스트링에 붙여주기 - 바꾼 문자 string에 붙여주기

new_words += word[i].upper() if i%2 == 0 else word[i].lower()

  1. 단어 하나가 반복이 끝나면 빈 리스트에 새로운 스트링 붙여주기

new_list.append(new_words)

  1. 새로 채워진 리스트 new_words에 있는 요소들 붙여서 리턴 (스페이스 중간에 넣어주기 )




<br><br><br>



### 참고
https://www.geeksforgeeks.org/python-split-string-into-list-of-characters/
``` py
def split(word): 
    return list(word)

def split(word): 
    return [char for char in word]  

2차원 리스트 표현식으로


>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]

join 함수 할 때 중간에 넣어줄 거는 '' 사이에

' + '.join(list)



other sol.

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(' ')])


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

한줄로.

enumerate

반복문 사용 시 몇 번째 반복문인지 확인이 필요할 때 사용
인덱스 번호와 컬렉션의 원소를 tuple형태로 반환

>> t = [1, 5, 7, 33, 39, 52]
>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)

변수 두개 주면 각각 활용 가능

 for i, v in enumerate(t):
profile
roundy

0개의 댓글