https://programmers.co.kr/learn/courses/30/lessons/12951
비교적 간단해 보이는 문자열 문제이다. 주어진 문자열의 첫 글자를 대문자로 변환해주면 된다.
def solution(s):
s = s.split()
answer = []
for word in s:
if word[0].isalpha():
word = word[0].upper() + word[1:].lower()
answer.append(word)
return ' '.join(answer)
처음 생각했던 접근방법을 그대로 구현했다. 테스트케이스 2개는 통과했지만, 제출 시 정확성 테스트가 43점으로 절반 이상 통과되지 못했다.
뭐가 문제일까 고민하다가, 다른 분이 올려둔 글을 보니 split()
과 split(" ")
이 다르게 작동한다는 것을 알게 되었다(충격!).
예를 들면,
string = "word1 word2 word3 word4 "
print(string.split())
> ['word1', 'word2', 'word3', 'word4']
print(string.split(" "))
> ['word1', 'word2', '', 'word3', '', '', 'word4', '', '', '', '']
# 출처: https://somjang.tistory.com/entry/Python-문자열-split-과-split-차이-알아보기
split( )은 공백의 수에 상관없이 무조건 1개로 보고 처리
split(" ")은 공백 1개, 1개를 각각의 공백으로 따로따로 처리한다고 한다.
추가적으로 split( )은 공백만 처리하는 것이 아니라 "\t" (탭), "\n" (엔터) 도 처리해준단다.
def solution(s):
s = s.split(" ")
for i in range(len(s)):
s[i] = s[i][:1].upper() + s[i][1:].lower()
return ' '.join(s)
split()
을 split(" ")
으로 바꾸고, for문 안에서 불필요한 작업을 없앴다. 결과는 잘 통과한다. 같은 코드에서 split()
으로 바꾸고 제출하면 통과가 안된다.
def solution(s):
answer = ''
s=s.split(' ')
for i in range(len(s)):
# capitalize 내장함수를 사용하면 첫 문자가 알파벳일 경우 대문자로 만들고
# 두번째 문자부터는 자동으로 소문자로 만든다.
# 첫 문자가 알파벳이 아니면 그대로 리턴한다.
s[i]=s[i].capitalize()
answer=' '.join(s)
return answer
# 출처: https://velog.io/@jiffydev/파이썬-알고리즘-110-프로그래머스-JadenCase-문자열-만들기
세상 간단하다.
capitalize()
함수처럼 시간 단축에 유용한 내장함수들을 많이 알아두자. replace()
를 사용하거나 리스트로 변환해서 변경하고 다시 스트링으로 변환해야 한다. split()
과 split(" ")
의 차이, 기억하자. 띄어쓰기가 여러 개 있는 케이스를 생각하지 못한 것이 시도 1의 실패 원인이었다.