문제링크

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

제한조건

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    • 숫자는 단어의 첫 문자로만 나옵니다.
    • 숫자로만 이루어진 단어는 없습니다.
    • 공백문자가 연속해서 나올 수 있습니다.

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

참고

https://kmsstat01.tistory.com/entry/stringsplit

 

‘문자열’.upper() 혹은 ‘문자열’.lower()는 ‘숫자’에 적용될 경우 그대로 나옴. 따라서 위 문제의 조건을 따로 고려하지 않아도 됨. 주의! upper 혹은 lower 뒤에 ()를 안하면 값이 생성되지 않으므로 꼭 ()를 뒤에 붙이자
ex) '1b'.upper() >>> ‘1B’ , '1B'.upper() >>> ‘1b’

 

코드

def solution(s):
    sol = []
    li = s.split(' ')  # 문자열을 split(' ')하면 공백을 기준으로 잘라서 리스트로 만든다. 이때 공백이 연속으로 있으면 공백의 수 -1 개의 ''이 리스트의 원소가 됨
    for k in li:
        
        if  k == '':    # 공백이 두개 이상 연속으로 있을 경우 리스트의 원소중에 ''이 있을 것. 이를 고려해야함
            sol.append(k)
        else:
            sol.append(k[0].upper() +k[1:].lower())   # '문자열'.upper()는 '숫자'.upper()을 할 경우에도 에러 없이 그대로 출력함 
    return(' '.join(sol))

 

아래의 코드는 하드코드이므로 비추천함....

def solution(s):
    sol = []
    li = s.split(' ')  # 문자열을 split(' ')하면 공백을 기준으로 잘라서 리스트로 만든다. 이때 공백이 연속으로 있으면 공백의 수 -1 개의 ''이 리스트의 원소가 됨
    for i in li:
        if i == '':     # 공백이 두개 이상 연속으로 있을 경우 리스트의 원소중에 ''이 있을 것. 이를 고려해야함
            w = ''
        else:
            w = ''    
            for j in range(len(i)):
                if i[0]  in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' :
                    if j ==0:
                        w = w + i[0].upper()
                    else:    
                        w = w + i[j].lower()
                else:
                    if j == 0:
                        w = w + i[0]
                    else:    
                        w = w + i[j].lower()
        sol.append(w)

    return(' '.join(sol))

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

'프로그래머스 > lv2' 카테고리의 다른 글

lv2 게임 맵 최단거리  (1) 2022.09.21
lv2 타겟 넘버  (0) 2022.09.20
lv2 N개의 최소 공배수  (0) 2022.09.20
lv2 피보나치 수  (0) 2022.09.18
lV2 가장 큰 수  (0) 2022.09.18

+ Recent posts