ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers/프로그래머스]이상한 문자 만들기
    코딩테스트/Programmers 2022. 9. 30. 15:50
    728x90
    반응형

    문제 설명

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

    제한 사항
    • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
    • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
    입출력 예
    s return
    "try hello world" "TrY HeLlO WoRlD"
    입출력 예 설명

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

    풀이

    이 문제는 단어(공백을 기준)별로 짝/홀수 인덱스를 판단하여 대/소문자 처리를 한다고 했으므로 먼저 s를 공백기준으로 잘라내야한다.

    • Python에서 문자열을 자르는 방법은 문자열 슬라이싱과 split() 메서드가 있다.
    • 어떠한 기준으로 문자열을 나눠야할 때는 split()을 쓰는게 좋다.
    • split()의 default 매개변수는 ' ' 공백이다.
    s_list = s.split()

    이렇게 잘라진 문자열의 짝수 인덱스 자리는 "대문자", 홀수 인덱스 자리는 "소문자" 처리를 한다.

    • 문자열을 대문자로 : upper()
    • 문자열을 소문자로 : lower()

    각 문자열을 변환하는 코드는 다음과 같다.

    // s_list의 한 개의 요소를 s라고 가정
    ''.join([c.upper() if idx%2==0 else c.lower() for idx,c in enumerate(s)])

    그리고 이 문자열들을 join()으로 하나의 문자열로 합친다. 단 기존의 공백 기준으로 나눴으므로 합칠 때 각 문자열 사이에 공백을 추가해야 한다.

    • join() 메서드 사용법 
    // 리스트 = [1,2,3,4]
    // 문자열.join(리스트)
    // 결과 : 1문자열2문자열3문자열4
    ' '.join(변환된 문자열이 들어있는 리스트)

    코드를 모두 합치면 다음과 같다.

    def solution(s):
        s_list = s.split(' ')
        return ' '.join([''.join([i.upper() if idx%2==0 else i.lower() for idx,i in enumerate(e)]) for e in s_list])

    map() 함수와 lambda를 사용하면 한줄로 코드를 작성할 수도 있다.

    • lambda 식으로 문자열을 변환하는 함수 작성
    • map함수로 lambda 함수 리스트에 적용
    • map 객체 문자열로 변환
    • 문자열 반환
    return ' '.join(map(lambda x:''.join([i.upper() if idx%2==0 else i.lower() for idx,i in enumerate(x)]),s.split(" ")))
    728x90
    반응형

    댓글

Copyright 2022. Pupbani all right reserved