[파이썬/알고리즘] 프로그래머스 - JadenCase 문자열 만들기 (정규식)

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한 조건

  • s는 길이 1 이상인 문자열입니다.
  • s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
  • 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫 번째 입출력 예 참고 )

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"
"aaaaa aaa" "Aaaaa Aaa"
"hello m   y friend" "Hello M   Y Friend"

 

코드

import re  # 정규식 사용. 정규식 라이브러리 re 불러옴

def solution(s):
    answer = s[0:].lower()  # answer에 s를 소문자로 변환하여 복사
    for i in re.findall('^[a-z]|\s[a-z]', answer):# 단어의 첫 부분이 소문자( ^[a-z] ) OR(|) 공백 뒤에 소문자( \s[a-z] )를
        answer = answer.replace(i, i.upper(), 1)  # 대문자로 변환

    return answer

 

자바스크립트 정규식으로 풀었던 문제를 파이썬으로 풀었다.

아직 파이썬에 익숙하지 않아서 그런지 자스가 편한 것 같다....

 

우선! 파이썬에서 정규식을 사용하려면 라이브러리인 re를 불러와야한다. 

그리고, 주어진 s를 소문자로 변환하여 answer 변수에 복사하였다.

 

(정규식 설명은 주석 참고)

파이썬 정규식 메소드에는 findall()이 있다.

findall()은 정규식과 매치되는 모든 문자열을 리스트로 반환하는 메소드이다.

 

 

예시3번에 "aaaaa aaa"를 findall을 사용하면 리스트는 [a, (공백)a]로 만들어진다.

하지만 replace에서 카운트를 지정하지 않고 answer = answer.replace(i, i.upper())로 사용하면, 결과는 "AAAAA AAA"로 나오게 된다.

 

그래서 replace를 사용할 때 count를 1로 해주었다. 즉, 리스트 개수만큼 반복되는 것이다.

결과는 "Aaaaa Aaa"로 출력됐다..

 

320x100