[프로그래머스] LV.2 JadenCase 문자열 만들기(python)
문제가 궁금하시다면 JadenCase 문자열 만들기를 클릭하세요.
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
- s는 길이 1 이상 200 이하인 문자열입니다.
- s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
- 숫자는 단어의 첫 문자로만 나옵니다.
- 숫자로만 이루어진 단어는 없습니다.
- 공백문자가 연속해서 나올 수 있습니다.
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
문제 해결
def solution(s):
answer = ''
s = s.split(" ")
for i in s:
if i == '':
answer += ' '
elif i[0].isalpha():
answer += i[0].upper()
answer += i[1:].lower()
answer += ' '
else:
answer += i[0]
answer += i[1:].lower()
answer += ' '
return answer[:-1]
문제 풀이 설명
1. 첫 번째 풀이
def solution(s):
answer = ''
s = s.split()
for i in s:
if i[0].isalpha():
answer += i[0].upper()
answer += i[1:].lower()
else:
answer += i[0]
answer += i[1:].lower()
answer += ' '
return answer.strip()
처음에는 공백을 기준으로 나누고 첫번째 글자가 문자로 시작하면 대문자로, 숫자면 뒷부분을 소문자로 바꿔서 answer에 더해줬다. 하지만 테스트케이스에서 44.4 / 100.0 점을 맞고 반례를 찾아본 결과, 공백이 여러개면 공백 또한 맞춰서 출력해줘야 한다는 걸 깨달았다......
2. 두 번째 풀이
def solution(s):
answer = ''
s = s.split(' ')
for i in s:
if i == '':
answer += ' '
elif i[0].isalpha():
answer += i[0].upper()
answer += i[1:].lower()
answer += ' '
else:
answer += i[0]
answer += i[1:].lower()
answer += ' '
return answer.strip()
완벽하게 끝난 줄 알고 있었는데..
하나의 영롱한 빨간빛이...
반례를 찾은 결과 문자열의 마지막이 공백으로 끝나는 경우가 있었다...
내가 마지막에 쓴 strip() 함수는 문자열 양 옆의 공백을 다 없애주는 함수이기 때문에 오류가 발생했다고 생각해
슬라이싱을 사용해 answer[:-1]로 내가 추가한 마지막 공백 하나만 없애주는 걸로 문제를 해결했다.
사용된 개념(split())
내가 헷갈린 split(), split(' ')에 대해 정리하려고 한다.
split()
먼저 그냥 split()은 공백이 여러 개여도 무조건 공백 기준 문자열들을 나눈다. 예를 들어 "a ba" 도 "a"와 "ba"로 나뉘게 된다.
split(' ')
split(' ')은 공백 하나를 기준으로 나눈다. 아까와 똑같은 예제를 보았을 때 "a", " ", " ", "ba"로 결과가 다른 것을 확인할 수 있다. 물론 기준점인 하나의 공백은 사라진다.