[문제 링크] 👇
풀이 방법
📌주의할 점 : 공백이 여러개 일 때
1️⃣ 주어진 문자열을 split(' ')로 나누어 각 단어와 공백을 유지한 채 리스트에 담는다.
2️⃣ 리스트의 각 단어를 확인하면서,
- 단어가 비어 있지 않다면 첫 문자를 대문자로 변환하고, 나머지 문자는 소문자로 변환한다.
- 첫 문자가 알파벳이 아닌 경우는 그대로 둔다.
3️⃣ 변환된 단어 리스트를 다시 공백을 기준으로 문자열로 합쳐 반환한다.
대문자로 변환하는 방법
s.upper()
소문자로 변환하는 방법
s.lower()
Solution
def solution(s):
words = s.split(' ') # 공백 포함해서 나누기
jaden_case_words = []
for word in words:
# 단어의 첫 문자 대문자, 나머지는 소문자로
if len(word) > 0:
jaden_case_words.append(word[0].upper() + word[1:].lower())
else:
jaden_case_words.append(word) # 공백만 있는 경우는 그대로 추가
return ' '.join(jaden_case_words)
다른 풀이
def solution(s):
return ' '.join([word.capitalize() for word in s.split(" ")])
👩💻 회고
간단한 문제인데,, 제대로 못 풀었다. 왜 틀렸는지 한참동안 생각했었는데, 공백을 고려하지 않고 풀었었다.
def solution(s):
answer = ''
for i in s.split(): # 공백 기준으로 분리한 문자열
#if i[0].isalpha(): # 단어의 첫 문자가 알파벳일 경우
answer += i[0].replace(i[0], i[0].upper()) # 단어의 첫 문자는 대문자로 변환
answer += i[1:].replace(i[1:], i[1:].lower()) + " " # 첫 문자를 제외한 나머지 문자는 소문자로 변환
return answer.rstrip() # 맨 뒤 공백은 제거
반례 케이스
# 1. 연속된 공백이 포함된 경우
print(solution("3people unFollowed me")) # "3people Unfollowed Me"
# 2. 문자열 시작과 끝에 공백이 있는 경우
print(solution(" hello world ")) # " Hello World "
# 3. 공백만 있는 경우
print(solution(" ")) # " "
title()
다른 사람의 풀이 보니 단순히 title() 함수를 쓴 풀이도 있었다. title() 함수는 처음 봤는데, 문자열의 각 단어의 첫 글자를 대문자로 변환하고, 나머지 글자는 모두 소문자로 만드는 메서드라고 한다. 그런데 그렇게 하면 문제가 너무 쉬워져서 공백 제약사항을 더 추가시켜서 title() 로는 못 풀게 다시 만든 것 같다. title() 로 못 푸는 이유는 다음과 같다.
title() 주의사항
title()은 단순히 첫 글자를 대문자로 만들기 때문에, 의도하지 않은 결과를 가져올 수 있다. 예를 들어, "python's best"는 "Python'S Best"로 출력된다.
capitalize()
capitalize() 함수도 이번에 처음봤다. 이 함수는 문자열의 첫 글자만 대문자로 변환하고, 나머지 모든 글자는 소문자로 변환한다. 첫 글자만 대문자로 변환하기 때문에 split() 으로 단어를 분리하고 후에 join 하는 연산이 추가로 필요하다.
'프로그래머스 코딩테스트 > Level 2' 카테고리의 다른 글
[Programmers] L2. 피보나치 수 (Python) (0) | 2024.11.10 |
---|---|
[Programmers] L2. 이진 변환 반복하기 (Python) (0) | 2024.11.09 |
[Programmers] L2. 최솟값 만들기 (Python) (0) | 2024.11.08 |
[Programmers] L2. 올바른 괄호 (스택/큐/Python) (0) | 2024.11.08 |
Programmers 다음 큰 숫자 (Python/Level 2) (0) | 2022.08.13 |