
새로운 한 주가 시작됐다.
시간이 참 빠르다...
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 함수도 기본기이기 때문에 꼭 기억하고 있어야겠다.
'개발자 일기 > 알고리즘 공부' 카테고리의 다른 글
| 작심큰일 챌린지 - Day 8. 병든 나이트 (미들러, Python) (4) | 2025.08.13 |
|---|---|
| 작심큰일 챌린지 - Day 7. 섬의 개수 (미들러, Python) (1) | 2025.08.12 |
| 작심큰일 챌린지 - Day 5. 피보나치 비스무리한 수열 (미들러, Python) (5) | 2025.08.08 |
| 작심큰일 챌린지 - Day 4. 너구리 구구 (미들러, Python) (4) | 2025.08.07 |
| 작심큰일 챌린지 - Day 3. 저울 (미들러, Python) (4) | 2025.08.06 |
댓글