JadenCase 문자열 만들기
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
입출력 예
s | return |
---|---|
3people unFollowed me | 3people Unfollowed Me |
for the last week | For The Last Week |
문제풀이 IDEA
글자의 첫번째만 대문자로 작성해줘야하므로1. 첫글자가 알파뱃인지 판단한다
2. 새로운 단어가 시작되는지 판단해준다.
이렇게 나눌 수 있겠다
따라서
1번의 경우에는 해당문자가 알파뱃범위에 있는지 판별해주고
2번의 경우 공백의 경우 조건문이 동작하지 않도록 장치를 설정해준다.
나의 코드
def solution(s):
answer = [] #문자열은 변경 불가능 하므로 list를 이용하여 답을 작성해준다
flag = 1 #공백다음으로 오는 단어의 첫글자를 판별한다
for i in s:
if "A" <= i <= "z" and flag == 1: #i가 알파벳이고 flag= 1 즉 공백 다음이면(시작값은 1이다)
answer.append(i.upper()) #해당 값을 upper해서 list에 추가하고
flag = 0 #flag를 0으로 만들어 첫글자가 아님을 알려준다
else:
answer.append(i.lower()) #첫글자가 아니므로 lower로 만들어주고 append해준다
flag = 0 #이 경우에도 flag를 0으로 해준 이유는 만약 공백이후에 알파벳이 안오는경우
#else문이 돌면서 append를 해주지만 flag를 0으로 안하면 계속 1이 설정되어있으므로
#Hello 3World 이런식으로 숫자다음 알파벳도 대문자화 된다
#따라서 flag를 0으로 하여 위왁 같은 case를 막았다
if i == " ": #공백이 발견되면 flag를 1로 만들어 다음글자가 단어의 시작일지 모른다는 신호를 준다
flag = 1
return "".join(answer) #생성된 list를 str로 만들어준다.
다른풀이의 주요 개념
str.title() 단어들의 첫글자를 대문자로 변경해주지만 공백 2개 or 숫자 시작같은경우 올바르지 못한 출력을 보인다.
그리고 split을 이용해 나눈 case가 많이 보이는데 split을 써서 나누게 되면 공백을 기준으로 나뉘게 되므로
공백이 2개 이상 있는 경우 처리가 힘들어진다.
따라서 간편한 방법이지만 공백이 1개인 문자열에서 밖에 못쓰다는 단점이 있다.
출처 : 프로그래머스
댓글 없음:
댓글 쓰기