Level 2. Jaden Case 문자열 만들기

Pear_Mh·2021년 7월 20일
0

Programmers-Level 2.

목록 보기
23/40

Jaden Case 문자열 만들기

코딩테스트 연습 > 연습문제 > Jaden Case 문자열 만들기

https://programmers.co.kr/learn/courses/30/lessons/12951


문제 설명

# 문제 본문

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열.
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수 구현.

# 제한 사항

- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

문제 풀이

01. 첫번째 시도: 런타임 에러

#00
s = " 3people unFollowed me "
#01
s = s.lower()
#02
answer=''
for i in range(len(s)):
    if s[i]==' ':
        answer+=s[i]
    elif s[i-1]==' ' and s[i].isalpha():
        answer+=s[i].upper()
    else:
        answer+=s[i]
#03
answer

문자열의 첫번째 원소가 알파벳인 경우와 문자열의 s 가 공백인 경우를 고려하는 중 런타임 에러가 발생한 것으로 판단됩니다.

이에 answer의 initial value를 빈 문자열이 아닌, 공백 하나를 포함한 문자열을 설정하고, 마지막에 answer의 두번째 원소부터 retrun 함으로써 위의 문제를 해결하였습니다.

02. 두번째 시도

# 2nd trial
# Input value
string = "for the last week" 
answer = ' ' # set initial value ' ', to filter easily
# process
# step 1.
for s in string.lower(): # Change lowercase
    if s.isalpha() and answer[-1] == ' ': # if s is alpha and answer[-1] is ' '
        answer+=s.upper() # Change uppercase
    else:
        answer+=s # else, just add s
answer[1:] # return answer[1:] because answer's initial value is ' '

03. capitalize()함수를 사용

파이썬에서는 문자열을 대문자로 바꾸는 3가지 방법이 있습니다.

string.upper() # 주어진 문자열에서 모든 알파벳들을 대문자로 변환
string.capitalize() # 주어진 문자열에서 맨 첫 글자를 대문자로 변환
string.title() # 주어진 문자열에서 알파벳 이외의 문자(숫자,특수기호,띄어쓰기 등)로 나누어져 있는 영단어들의 첫 글자를 모두 대문자로 변환

위의 3가지 방법 중, Jaden Case 문자열 변환은 capitalize()함수를 사용하여 쉽게 해결할 수 있습니다.

# Input value
string = "for the last week" 
# Output value
' '.join([s.capitalize() for s in string.split(' ')])

전체 코드

#01 Using upper(),lower()
def solution(string):
    answer = ' '
    string=string.lower()
    for s in string:
        if s.isalpha() and answer[-1] == ' ':
            answer+=s.upper()
        else:
            answer+=s
    return answer[1:]
    
#02 Using capitalize()
def solution(s):
    return ' '.join([word.capitalize() for word in s.split(" ")])
profile
Beyond the new era.

0개의 댓글

관련 채용 정보