프로그래머스 LV1 이상한 문자 만들기(연습문제)

프로그래머스 LV1 이상한 문자 만들기(연습문제)

2021, Apr 05    

프로그래머스 lv1 이상한 문자 만들기(연습문제)

문제 설명

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

제한 사항

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

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

입출력 예

s return
“try hello world” “TrY HeLlO WoRlD”

입출력 예 설명

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


접근

아스키코드를 활용한다.
32는 공백(space)
소문자 ‘a’ 는 97 대문자 ‘A’는 65 즉 대문자 + 32는 소문자, 소문자 - 32는 대문자
chr()-> 아스키 코드 숫자 값 알려주기 ord()-> 아스키 코드 숫자로 문자 값 알려주기


풀이

def solution(s):
    words_list=s.split(' ')
    new_list = []
    new_words = ""

    for word in words_list:
        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)

if __name__ =="__main__":
    s = "try hello world" # return = "TrY HeLlO WoRlD"
    print(solution(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(" ")))

s.split(" ")으로 공백을 기준으로 나눈 리스트를 만든다.
그리고 lambda식에 홀수면 lower(), 짝수면 upper()로 대소문자를 바꿔주는 함수를 만든 후 "".join으로 합쳐주는 조건식을 짜고.
이 람다식에 iterator인 s.split(" ")이 들어가는 것이다. map(조건식, iterator)

str.join(iterable): iterable 의 문자열들을 이어 붙인 문자열을 돌려줍니다. iterable 에 bytes 객체나 기타 문자열이 아닌 값이 있으면 TypeError 를 일으킵니다. 요소들 사이의 구분자는 이 메서드를 제공하는 문자열입니다. <파이썬 공식문서="">


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges