*문제 출처는 프로그래머스에 있습니다.
문제 제목: JadenCase 문자열 만들기 (2단계)
문제 사이트: https://programmers.co.kr/learn/courses/30/lessons/12951
def solution(s):
answer = ''
new_s = s.split(" ") # 공백을 기준으로 배열에 단어 저장
for i in range(len(new_s)):
if new_s[i] == '': # 문제 point 주어진 공백은 그대로 출력해야함
answer += " "
continue
if new_s[i] != '':
if new_s[i][0].isnumeric():
answer += new_s[i].lower()
if new_s[i][0].isalpha():
answer += new_s[i][0].upper() + new_s[i][1:].lower()
answer += " " # 띄어쓰기 구분
return answer[:-1] # 띄어쓰기 구분에서 마지막에 추가되는 공백 삭제
우선 new_s = s.split(' ') 을 하면
new_s = ['3people', 'unFollowed', 'me']
이렇게 공백을 기준으로 새로운 배열에 저장이 된다.
그런데 split('')을 사용하면, 공백을 기준으로 새로운 배열에 자르고 나서, 나머지 공백(단어 사이에 존재하지 않은 공백)은 '' 으로 저장된다.
예를 들어서 보자.
내가 만든 예제
l love you 문자 뒤에 공백을 5개 넣어주었다.
n = "I love you "
cnt1 = 0
for i in n:
if i == " ":
cnt1 += 1
print("자르기 전 공백의 개수:", cnt1)
cnt2 = 0
new_s = n.split(" ")
for i in new_s:
if i == "":
cnt2 += 1
print("자르고 나서 공백의 개수:",cnt2)
실행 결과
따라서, 이 문제에서 공백의 개수가 바뀌면 안되고, 그대로 출력해야한다는게 가장 중요하다.
문자를 나누었다면, 이제 다시 합쳐보자.
answer = ''
for i in new_s:
if i == "":
answer += " "
if i != "":
answer += i
answer += " "
cnt3 = 0
for i in answer:
if i == " ":
cnt3 += 1
print("다시 합치고나서 공백의 개수:",cnt3)
그러면 여기서 우리는 한가지 의문점을 발견할 수 있다.
분명 공백의 개수는 처음 그대로 출력되어야하는데, 왜 다시 합치고 나서 공백의 개수가 하나 더 늘어난 것일까?
그 이유는 위에서 작성한 코드를 보면 알 수 있다.
for i in new_s:
if i == "":
answer += " "
if i != "":
answer += i
answer += " "
i 가 값이 있을 경우, i를 추가해주고 뒤에 공백을 추가해주면
단어 사이에 공백뿐만 아니라 단어 제일 끝에도 공백이 생긴다. 따라서 마지막에 생긴 공백까지 없애주어야한다.
여기서 answer[:-1] 을 이용하면 제일 마지막에 있는 공백을 없애고 출력할 수 있다.
따라서 최종 코드와 출력 창을 보자.
n = "I love you "
cnt1 = 0
for i in n:
if i == " ":
cnt1 += 1
print("자르기 전 공백의 개수:", cnt1)
cnt2 = 0
new_s = n.split(" ")
for i in new_s:
if i == "":
cnt2 += 1
print("자르고 나서 공백의 개수:",cnt2)
answer = ''
for i in new_s:
if i == "":
answer += " "
if i != "":
answer += i
answer += " "
answer = answer[:-1]
cnt3 = 0
for i in answer:
if i == " ":
cnt3 += 1
print("다시 합치고나서 공백의 개수:",cnt3)
print(answer)
내장함수 Title
s = "i love you "
print(s.title())
물론, 우리가 이런 고생을 할 필요 없이 내장함수 title을 사용하면 공백도 함께 고려하여
단어의 첫 글자가 대문자로 변환되어 간단하게 출력된다.
하지만, 이 문제를 풀 때에 숫자 뒤의 문자는 대문자로 바꾸면 안된다는 조건때문에 문제를 풀 때 사용하지 못하는 내장함수이다.
※ 알아야 할 것
- title 함수는 단어의 첫글자들을 대문자로 변환해준다. 하지만, 단어 앞에 문자가 붙어도 대문자로 변환한다.
- split(' ') 을 이용하면 공백을 기준으로 단어를 나눌 수 있지만, 문자 사이에 있지 않은 공백은 ''으로 저장 된다.
'coding test - python > Programmers' 카테고리의 다른 글
Programmers / 올바른 괄호 / Python 파이썬 (0) | 2022.05.05 |
---|---|
Programmers / N개의 최소공배수 / Python 파이썬 (0) | 2022.05.05 |
Programmers / 행렬의 곱셈 / Python 파이썬 (0) | 2022.04.30 |
Programmers / 피보나치 수 / Python 파이썬 (0) | 2022.04.30 |
Programmers / 신규 아이디 추천 / Python 파이썬 (0) | 2022.04.29 |