본문 바로가기
개발자 일기/알고리즘 공부

작심큰일 챌린지 - Day 6. JadenCase 문자열 만들기 (미들러, Python)

by MS_developer 2025. 8. 11.

출처 - 작심큰일 챌린지 메인 페이지

 

 

새로운 한 주가 시작됐다.

 

시간이 참 빠르다...


Day 6. JadenCase 문자열 만들기

 

오늘의 문제는 프로그래머스 12951번 문제다.

 

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한조건

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다

입출력 예

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

 


풀이 과정

 

먼저 전체적인 문제풀이의 흐름부터 정리했다.

 

i. 주어진 입력값을 공백 기준으로 분리하여 list로 반환
ii. 해당 list를 단어별로 순회
iii. 첫 글자 조건에 따라 대문자 변환
iv. 나머지 소문자 변환
v.  문자열 재조합

 

이후에 문제의 제한 조건을 보며 조심해야할 점들을 살펴 보았다.

 

연속 공백 유지

제한 조건에는 "공백 문자가 연속해서 나올 수 있습니다." 라고 했다.

 

이는 즉, " hello world"와 같이 공백이 연속해서 입력될 수 있는 경우에 대한 핸들링도 대비할 필요가 있다는 말이다.

 

words_list = input().split(' ')

 

연속 공백을 유지하기 위해서 split에 매개변수로 ' ', 즉 공백을 추가했다. 기존 split()은 연속 공백을 무시하지만, ' '을 인자로 주면 빈 문자열도 리스트에 포함할 수 있다.

 

첫 단어만 대문자화

 

문자열의 처음만 대문자화하는 방법은 python에서는 매우 간단하다.

 

# word는 words_list의 요소
word[0].upper() + word[1:].lower()

 

구현

해당 문제는 프로그래머스 기준으로, 입력값이 s로 solution 함수에 매개변수로 전달되니, 별도 input()은 필요없다.

 

def solution(s):
    words_list = s.split(' ')
    result = []
    
    for word in words_list:
        if word == "":
            result.append("")
        else:
            result.append(word[0].upper() + word[1:].lower())
    
    return ' '.join(result)

 

 


 

개선점

해설 코드는 다음과 같았다.

 

def solution(s):
    slist = s.split(' ')  # 공백을 기준으로 문자열을 단어로 나눕니다.
    for i in range(len(slist)):
        slist[i] = slist[i].capitalize()  # 각 단어의 첫 글자를 대문자로 바꿉니다.
    result = ' '.join(slist)  # 다시 공백을 기준으로 단어들을 합칩니다.
    return result

 

해설 코드를 보고 capitalize() 함수를 활용하는 방식에 대해 생각하지 못했던 것 을 알았다.

 

핵심은 공백을 어떻게 유지할지, 빈 문자열은 어떻게 처리할지, 그리고 capitalize를 활용해 직접 구현 없이도 코드를 구현하는 방법이었다.

 

split-join 패턴은 알고 있었지만, capitalize 함수를 쓸 생각은 하지 못했던 것 같다.

 

capitalize 함수도 기본기이기 때문에 꼭 기억하고 있어야겠다.

 

댓글