[til] 알고리즘 JadenCase 문자열 만들기

유승완유승완
2 min read

🧑‍💻 오늘의 문제: JadenCase 문자열 만들기

📌 문제 요약

  • 문자열 s가 주어질 때, JadenCase 규칙으로 변환해야 하는 문제이다.

  • JadenCase 규칙

    1. 각 단어의 첫 문자는 대문자

    2. 나머지 문자는 소문자

    3. 숫자로 시작하는 단어의 경우는 그대로 둔다 (숫자는 대문자로 변환할 수 없음)

  • 여러 공백이 연속될 수 있으며, 각 단어 사이의 공백도 유지해야 한다.


🚩 알고리즘 분류

  • 문자열 처리, 구현

🖥️ 내가 작성한 코드

def solution(s):
    answer = ''
    word_list = s.split(" ")
    for word in word_list:
        first = word[0:1]
        last =  word[1:].lower()
        if first.isdigit():
            answer += first + last
        elif first.isalpha():
            answer += first.upper() + last
        elif first == " ":
            # 첫 글자가 공백인 경우 처리 (split(" ")이면 빈 문자열일 수 있음)
            answer += " "
        answer += " "         # 각 단어 사이 공백 유지
    # 마지막에 붙은 공백을 제거
    answer = answer[:-1]
    return answer

🔎 풀이 핵심 아이디어

  • split(" ")를 사용해 원본 문자열의 공백 개수를 보존.

  • 각 단어별로 첫 글자를 대문자/숫자로 처리하고, 나머지는 소문자로 만든다.

  • 숫자로 시작할 경우 대문자 변환을 따로 하지 않는다.

  • 빈 문자열(첫 글자가 공백이었던 경우)을 처리하는 로직도 필요하다.


🔍 참고할 만한 다른 사람의 간결한 풀이

def solution(s):
    # 문자열 전체를 소문자로 만들고, 단어를 공백 기준으로 split
    words = s.lower().split(" ")

    # 각 단어의 첫 글자만 대문자로 처리
    for i in range(len(words)):
        if len(words[i]) > 0:
            words[i] = words[i][0].upper() + words[i][1:]

    return " ".join(words)

장점

  • 빈 문자열(공백만 있는 단어)에 대해서도 if len(words[i]) > 0:를 통해 처리한다.

  • split과 join을 이용해 공백을 원형 그대로 복원하므로, 공백 개수를 보존할 수 있다.

주의

  • split(" ")split()는 다르다.

    • split(" ")는 원본 문자열의 공백 개수를 그대로 유지해주는 반면, split()는 연속된 공백을 하나로 본다.
  • 문제 요구사항대로 공백을 정확히 유지하려면 split(" ")를 사용해야 한다.

0
Subscribe to my newsletter

Read articles from 유승완 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

유승완
유승완