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

2 min read

🧑💻 오늘의 문제: JadenCase 문자열 만들기
📌 문제 요약
문자열 s가 주어질 때, JadenCase 규칙으로 변환해야 하는 문제이다.
JadenCase 규칙
각 단어의 첫 문자는 대문자
나머지 문자는 소문자
숫자로 시작하는 단어의 경우는 그대로 둔다 (숫자는 대문자로 변환할 수 없음)
여러 공백이 연속될 수 있으며, 각 단어 사이의 공백도 유지해야 한다.
🚩 알고리즘 분류
- 문자열 처리, 구현
🖥️ 내가 작성한 코드
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
