[프로그래머스] JadenCase 문자열 만들기 - 레벨2

eternal moment·2023년 9월 14일
0

문제 : JadenCase 문자열 만들기

2023.09.15 풀이

def solution(s):
    answer = ''
    arr=list(map(str, s.split(" ")))
    for i in range(len(arr)):
        if arr[i]!="":
            arr[i]=arr[i].lower()
            arr[i]=str(arr[i][0]).upper()+arr[i][1:]
    # print(arr)
    answer=" ".join(arr)
    return answer
  • 공백을 제거한 문자열을 처리한 후 공백을 다시 붙이는 형태로 생각함
  • 공백이 연속으로 올수 있기에 if arr[i]!="": 코드를 통해 공백이 아닌 문자열에서만 처리해주고자 하였음
  • 숫자도 upper() 처리해도 상관없었기에, 아래와 같은 코드로 진행하였으나(테스트케이스는 통과)
            # arr[i]=arr[i].lower()
            # arr[i]=arr[i].replace(arr[i][0], str(arr[i][0]).upper())
  • 이 경우는 "aaaaa aaa aaaaaaa"가 "Aaaaa Aaa Aaaaaaa"가 아닌 "AAAAA AAA AAAAAAA"로 나오는 오류 발생 -> 첫문자만 바꿔준 후 나머지 문자열을 붙여주는 형태로 작성하고자 코드 변경
    (이 반례를 짐작하지 못했음. 다른 문제에서도 이런 반례가 있을 수 있음)


다른 풀이

1 : capitalize 내장함수

def solution(s):
    answer = ''
    s=s.split(' ')
    for i in range(len(s)):
        # capitalize 내장함수를 사용하면 첫 문자가 알파벳일 경우 대문자로 만들고
        # 두번째 문자부터는 자동으로 소문자로 만든다
        # 첫 문자가 알파벳이 아니면 그대로 리턴한다
        s[i]=s[i].capitalize()
    answer=' '.join(s)
    return answer

2: 내 풀이에서 응용 - 좀 더 간단히. (if word로 빈 문자열인지 확인 가능, upper/lower 한번에 쓰는 부분)

def solution(s):
    answer = []
    s = s.split(" ")
    for word in s:
        if word:
            answer.append(word[0].upper() + word[1:].lower())
        else:
            answer.append(word)
    return " ".join(answer)


check point

  • replace는 문자열 맨 앞글자가 아닌 문자열 전체에서 변경되는 점 유의.
  • capitalize() : 첫 문자가 알파벳이면 대문자, 이후는 소문자로 리턴하는 내장함수

0개의 댓글