JadenCase 문자열 만들기

우하학·2024년 11월 10일

프로그래머스

목록 보기
8/14

문제요약

공백을 포함한 문자열이 주어졌을 때, 단어의 첫 문자만 대문자로 바꾸고 나머지는 소문자로 바꿔야 함. 근데 공백이 한칸으로 문장이 구성된 게 아니고 숫자가 첫 문자인 단어는 그냥 넘어가고 나머지 문자들은 소문자로 만들어야 함

뭐야 그냥 스플릿하고 소문자로 만든다음에 첫 글자만 대문자로 바꾸면 되는 거 아니야 ~

오류 코드

def solution(s):
    answer = ""
    splited = s.split(" ")
    try :
        for word in splited :
            word = word.lower()
            print(word)
            if word[0].isdecimal() == True:
                answer += word + " "
            else :
                up = word[0].upper()
                answer += up+word[1:] +" "
    except :
        print("error")
    return answer.strip()

진짜 치명적인 오류 : 공백이 2개인 경우에는 에러가 발생 함 ... ㅋ

그래서 한글자 한글자 보면서 조건을 체크하고 문자열을 합치기로 뒤엎음

정답 코드

def solution(s) :
    answer = ""
    flag = True
    for i in s :
        if flag is True :
            if i.isdecimal() is True or i == " ":
                answer += i.lower()
            else :
                answer += i.upper()
            flag = False
            if i == " " :
                flag = True
        else :
            answer += i.lower()
            if i == " ":
                flag = True

    return answer

이게 C언어인지 모를 정도로 원초적인 방법으로 푼 거 같은데 도저히 어떻게 해야할 지 생각이 나질 않는다. ........

  • 이렇게 하면 flag가 True이고 숫자가 아닐 경우에만 대문자로 바꾸고 중간에 공백이 몇 개든 상관 없이 진행할 수 있다

알아야할 것

  • strip() : trim()과 같은 역할인데 좌우 공백을 지워준다.
    특히나 lstrip(), rstrip()은 각각 좌우의 공백만 지워준다는 걸 기억하자
  • isdecimal() : 문자열을 숫자로 판별할 수 있는 것
    이건 좀 기억을 해둬야 요기조기 쓸 수 있을 듯
  • upper(), lower() : 각각 대,소문자로 변경하는 함수이다.
  • isupper(), islower() : 각각 대소문자를 판별하는 함수이다.
profile
코린이 탈출기

0개의 댓글