728x90
반응형
📌 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/12951
📌 풀이코드
🍀 1번째 시도: FAIL
- 테스트 코드는 전부 맞혔는데, 코드 제출하니까 30점대 정확도...
- 생각해보니, 공백을 제거하라는 말은 없었다. 제한사항에도 공백이 연속적으로 등장할 수 있다고 했고. 즉, 내 임의대로 공백 연속이든 1개든 1개로 퉁칠 게 아니라 있는 그대로 공백을 넣어야 한다는 뜻.
- 그래서 split()에 대해 좀 더 알아보게 되었다.
def solution(s):
answer = ''
s_list = list(map(str, s.split()))
for c in s_list:
c = c[0].upper() + c[1:].lower()
answer += c + " "
# 공백문자가 연속해서 나올 수 있다..?
return answer[:-1]
⭐⭐⭐ 배운 점
1. split()과 split(" ")의 차이 (구분자는 결과에 포함X)
- split(): 공백이 1개이건 2개이건 n개이건 상관없이 무조건 1개로 보고 처리
- 공백만 처리하는 것이 아니라 "\t" ( 탭 ), "\n" ( 엔터 ) 도 처리
- split(" "): 공백 1개, 1개를 각각의 공백으로 따로따로 처리
string = "word1 word2 word3 word4 "일 때
print(string.split())
> ['word1', 'word2', 'word3', 'word4']
print(string.split(" "))
> ['word1', 'word2', '', 'word3', '', '', 'word4', '', '', '', '']
2. 공백이 연속 두 개라면, split(" ") 했을 때 구분자 = " " 는 포함되지 않는다.
- 공백을 _ 로 표기한다면, s = "word1__word2_word3_"를 2가지 모두 실행해 보았다.
- split()은 구분자 = " " (공백) => 1) 구분자 포함 없이, 2) 공백 n개든 1개로 보고 리턴한다.
- split(" ") 은 구분자 = " " (공백) => 1) 구분자 포함 없이, 2) 연속된 공백은 구분자 공백 1개 제외하고 남기고 3) 맨 마지막에 있는 공백은 살린다는 걸 알 수 있다.
🍀 2번째 시도: PASS
- 임의로 처리한 공백을 제거하지 않고, 그대로 넣었더니 PASS !!
- 즉, 구분자 제거로 공백 1개는 무조건 제거된다. 이를 감안해 else문에서 answer에 " "까지 더해주었다.
- 남는 여분의 공백 처리를 위해서는 ''일 때 answer에 " " 를 추가해주었다.
📌 풀이코드
def solution(s):
answer = ''
s_list = list(map(str, s.split(" ")))
for c in s_list:
if c == '':
answer += " "
else:
c = c[0].upper() + c[1:].lower()
answer += c + " "
# 공백문자가 연속해서 나올 수 있다..?
return answer[:-1]
728x90
반응형