[프로그래머스] JadenCase 문자열 만들기 - 파이썬

Donghyun·2024년 8월 8일
0

Code Kata - 파이썬

목록 보기
34/54
post-thumbnail

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

문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)

문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

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

입출력 예

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

문제풀이

문제 이해하기:

JadenCase: 모든 단어의 첫 문자가 대문자이고, 그 이의 알파벳은 소문자인 문자열. 단, 첫 문자가 알파벳이 아니라면 이어지는 알파벳은 소문자로 쓴다.

목표: 문자열 s 를 JadenCase로 변환해서 return

내 풀이:

  • 먼저, 문자열 s 를 split()
  • 분리한 문자열에 대해 for 문을 돌면서 전체 단어를 소문자로 바꿔준다.
  • 그리고 첫번째 단어를 first_word 변수에 저장
  • fisrt_word 가 알파벳이라면 → 대문자로 바꾸고, answer 에 추가
    • 이 때 해당 단어가 s의 마지막 단어가 아니라면 공백도 같이 추가
  • first_word 가 알파벳이 아니라면 → 그대로 answer 에 추가
    • 마찬가지로 마지막 단어가 아니라면 공백도 추가

코드

def solution(s):
    answer = ''
    # 단어를 각각 분리해서 리스트로 저장
    words = s.split()
    
    # 분리한 단어들에 대해 반복문을 돌면서
    for i in range(len(words)):
        # 먼저, 전체 단어를 소문자로 바꿔준 후
        word = words[i].lower()
        # 첫 번째 단어를 바꾸기 위해 first_word 라는 변수명에 저장
        first_word = word[0] 
        
        # first_word가 알파벳인 경우 대문자로 변환 후 answer에 추가
        if first_word.isalpha():
            answer += word.replace(first_word, first_word.upper(), 1)
            # 그리고 단어가 미자막 단어가 아닌 경우 공백을 추가
            if i != len(words)-1:
                answer += ' '
        # first_word가 알파벳인 아닌 경우 그대로 answer에 추가하고, 마찬가지로 마지막 단어가 아니라면 공백도 추가
        else:
            answer += word
            if i != len(words)-1:
                answer += ' '
        
    return answer
  • 이렇게 작성했을 때의 채점 결과 정확성이 44.4로 반타작도 못했다. 내가 어떤 부분을 놓치고 있을까?
    • 제한조건을 보면 공백문자가 연속으로 나올 수 있다고 한다. 근데 내가 작성한 코드는 공백을 하나만 다룰 수 있기 때문에 문제의 조건을 잘 반영하지 못하고 있었다.

두 번째 풀이:

  • 그래서 이번에는 띄어쓰기가 한 칸 이상인 경우를 고려하여 split을 할 때 공백을 기준으로 분리했다.
  • 그리고 words의 각 요소들에 for문을 돌면서
    • 단어가 비어있지 않다면 → 첫 단어를 대문자로 바꾼 후 뒤에 단어들은 소문자로 바꿔 answer에 추가
    • 단어가 비어있다면 → 그대로 answer에 추가
  • 마지막으로 모든 단어들을 공백을 사이에 두고 다시 결합하여 return

최종코드

def solution(s):
    answer = []
    # 띄어쓰기가 한 칸 이상인 경우를 고려하여 공백을 기준으로 분리해서 리스트로 저장
    words = s.split(' ')

    # words의 각 요소들에 for문을 돌면서
    for word in words:
        if word:  # 단어가 비어있지 않다면 첫 단어를 대문자로 바꾼 후 뒤에 단어들은 소문자로 바꿔 answer에 추가
            answer.append(word[0].upper() + word[1:].lower())
        else:  # 단어가 비어있다면 그대로 answer에 추가
            answer.append(word)
    
    # 마지막으로 모든 단어들을 공백을 사이에 두고 다시 결합하여 return
    return ' '.join(answer)
profile
데이터분석 공부 일기~!

0개의 댓글