본문 바로가기

Python

프로그래머스 - 이상한 문자 만들기

문제

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

 

프로그래머스

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

programmers.co.kr

해설

첫번째 풀이

def solution(s):
    answer = ''
    wordIndex = 0
    for word in s:
        if word == ' ':
            answer += ' '
            wordIndex = 0
        else:
            if wordIndex % 2 == 0:
                answer += word.upper()
            else:
                answer += word.lower()
            wordIndex += 1
    return answer

 

반복문을 순회하면서 각 요소가 공백인지 아닌지 확인한다.

공백이면 공백 그대로 answer 변수에 추가하고 wordIndex 값을 0으로 초기화 해준다.

왜냐하면, 공백을 기준으로 나뉜 단어의 index를 기준으로 대소문자를 변환하기 때문이다.

 

공백이 아니면, 단어의 index가 짝수인지 홀수인지 체크하고 짝수면 대문자로 변환, 홀수면 소문자로 변환한다.

변환을 하고 나면 wordIndex 값을 1 증가시킨다.

 

두번째 풀이

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

 

문자열을 공백을 기준으로 구분하여 리스트로 만든다.

리스트를 map 함수로 순회하면서 lambda 함수를 실행한다.

lambda 함수에서 현재의 문자열의 index를 참조하여 대소문자로 변환한다.

변환이 끝나면 join 메서드로 해당 리스트를 문자열로 합쳐준다.