본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv2 JadenCase 문자열 만들기 (python)

by 개발하는 호랑이 2024. 1. 30.

JadenCase 문자열 만들기

풀이

처음에는 간단하게 title()을 쓸까 했지만 문제에서 숫자 다음은 그냥 소문자로 이어지도록하라 했기에 쓸 수 없었다.
그리고 다른 방법으로 capitalize()를 아래처럼 사용해봤다.

def solution(s):
    s_list = list(map(str, s.split()))
    for i in range(len(s_list)):
        s_list[i] = s_list[i].capitalize()
    return ' '.join(s_list)

하지만 위의 방법도 결국 제한 조건에서 '공백문자가 연속해서 나올 수 있습니다.'라는 조건으로 인해 예시로 "for the last week"의 경우에는 해결할 수 없었다. 결국 조금 코드가 길어지긴 하지만 아래의 방법을 사용했다.

  1. 문자열 전체 소문자화
  2. 각 문자 알파벳 여부 확인
  3. 문자열[0] 부분이 알파멧이라면 대문자
  4. 공백 이후의 문자는 1번인덱스부터는 이전 인덱스가 공백인지 확인하고, 이전 인덱스가 공백이면서 해당 인덱스가 숫자가 아니라면 대문자화
def solution(s):
    answer = ''
    # 전체 소문자화
    s = s.lower()
    for i in range(len(s)):
        # 알파벳인지 확인
        if s[i].isalpha():
            # 문자열의 첫 문자인 경우 대문자로 answer에 입력
            if i == 0:
                answer += s[i].upper()
            # 문자열의 첫 문자가 아닌데 이전이 공백이면 대문자로 만들어 answer에 입력
            elif i != 0 and s[i-1] == ' ':
                answer += s[i].upper()
            # 위 상황이 아니면 answer에 그대로 입력
            else:
                answer += s[i]
        # 알파벳이 아니면 answer에 그냥 대입
        else:
            answer += s[i]
    return answer

다른 사람 풀이

이 풀이는 split()을 이용하되 단순 split()이 아닌 split(' ')을 이용함으로 공백까지 list에 입력시켰다.
따라서 이후 return값에 입력시키는 answer에서도 기존에 있던 공백이 줄어드는 문제없이 해결되었다.

def solution(s):
    answer = ''
    for i in s.lower().split(' '):
        if answer == '':
            answer += i.capitalize()
        else:
            answer += ' '+i.capitalize()
    return answer