JadenCase 문자열 만들기

신연우·2021년 2월 15일
0

알고리즘

목록 보기
37/58
post-thumbnail

프로그래머스 - JadenCase 문자열 만들기

문제 설명

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

제한 조건

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

입출력 예

sreturn
"3people unFollowed me""3people Unfollowed Me"
"for the last week""For The Last Week"

풀이

def solution(s):
    answer = ''

    for character in s:
        if not len(answer) or answer[-1] == ' ':
            answer += character.upper()
        else:
            answer += character.lower()

    return answer

해결과정

파이썬은 strupper()lower() 메서드를 통해 대소문자로 쉽게 변환할 수 있다. 또한 해당 문자가 알파벳이 아닌 경우는 에러가 나지 않고 그대로 반환되니 따로 에러 처리를 하지 않아도 된다는 장점이 있다.

그렇다면 언제 upper()를 사용하고, 언제 lower()를 사용해야 하는지를 구분하는 것이다.

upper()를 사용해야 할 때는 다음 두 가지로 나눌 수 있다.

  1. answer가 빈 문자열일 때
    이때는 s의 첫 문자를 가져올 때를 의미한다. 이때는 해당 문자가 알파벳이 아니라면 그냥 넣으면 되지만 알파벳이라면 반드시 대문자로 변환하여 넣어야 하므로 이 경우 upper() 메서드를 사용해야 한다.

  2. answer의 가장 마지막 문자가 공백 문자일 때
    이 경우, 앞에 넣던 단어가 끝나고 공백이 들어갔다는 것을 의미한다. 그렇다면, 자신은 새로운 단어의 시작이 된다.

    이때 자신이 알파벳이 아니라면 그냥 넣어도 되지만 알파벳이라면 대문자로 변환해야 하므로 upper() 메서드를 사용해야 한다.

이 두 경우를 제외하고 나머지는 모두 lower() 메서드를 사용하면 된다.

다른 사람의 풀이

def solution(s):
  answer = ''
  
  for i in s.split(' '):
    i = i.lower()
    i = i.capitalize()
    answer += i +' '
  
  return answer[:-1]

코드 출처 - [코딩하는 금융인]

split() 메서드를 사용할 때 split()으로 하면 " ABC"의 경우 ["ABC"]로 반환되지만 split(' ')으로 하면 [" ", "ABC"]로 반환된다.

split() 메서드에 인자를 주지 않으면 자동으로 화이트 스페이스를 기준으로 나눠주는 것으로 알고 있었는데, 이런 차이가 있다는 점을 알게 되었다(그나저나 왜 저런 차이가 있는 걸까?).

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글