본문 바로가기

알고리즘

프로그래머스: JadenCase 문자열 만들기

[level 2] JadenCase 문자열 만들기 - 12951

문제 링크

성능 요약

메모리: 10.3 MB, 시간: 0.01 ms

구분

코딩테스트 연습 > 연습문제

채점결과

정확성: 100.0
합계: 100.0 / 100.0

제출 일자

2024년 1월 6일 2:21:42

문제 설명

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"

※ 공지 - 2022년 1월 14일 제한 조건과 테스트 케이스가 추가되었습니다.

풀이

def solution(s):
    answer = ''
    chars = [s for s in s.split(' ')]
    for i in range(len(chars)):
        if chars[i] and chars[i][0].isdigit():
            if i + 1 < len(chars):
                answer += chars[i].lower() + ' '
            else:
                answer += chars[i].lower()
        else:
            if chars[i]:
                if i + 1 < len(chars):
                    answer += chars[i][0].upper() + chars[i][1:].lower() + ' '

                else:
                    answer += chars[i][0].upper() + chars[i][1:].lower()

            else:
                if i + 1 == len(chars):
                    return answer
                else:
                    answer += ' '

    return answer

느낀점

우선 문자열 s의 길이가 200이기 때문에 시간복잡도 측면에서 큰 걱정이 없이 문제를 풀게됐다. 해당 문제에서는 lower()와 upper() 그리고 isdigit() 내장함수를 사용하면 문제가 금방 풀리는 것을 알 수 있다. 하지만 여기서 중요한 점은 (' ') 이와 같은 공백란이 연속되게 나타날 수 있다는 점이다. 따라서 인덱스 에러를 피하기 위해서 처음 if 문과 else 안에 if 문에서 ('')이 들어있는지 확인하고 들어있다면 문자열에 ' '으로 추가해야 하는것만 조심하면 문제를 어렵지 않게 맞출 수 있다고 생각한다.

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