Coding Test Practice/프로그래머스

프로그래머스 level 2, JadenCase 문자열 만들기, python

still..epochs 2022. 7. 25. 16:47

문제 설명

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"

 

문제

주어진 문자열 s를 받아 단어의 첫 알파벳을 대문자로 바꾸고, 나머지 알파벳은 소문자로 바꾸어 정답을 출력하면 된다.

처음에 제한 조건 중, 공백문자가 연속해서 나올 수 있습니다 를 간과하여 오답처리가 됬었다... 어쨌든 단어의 첫 번째 알파벳을 대문자로 바꿔줄 때, 사용할 수 있는 여러 함수가 있는데 이걸 먼저 알아보자!

 

1. upper()  메소드 : 모든 알파벳을 대문자로 변환 해 준다

 # upper()
 word = 'abcd'
 print(word.upper())
 
 출력결과 >> "ABCD"

 

2. capitalize()  : 맨 첫글자만을 대문자로 변환 해 준다.

# capitalize()

Case 1
word1 = "i'm still hungry"
print(word.capitalize())

출력결과 >> "I'm still hungry"


Case 2
word2 = "aNGRYbird is still angry"
print(word2.capitalize())

출력결과 >> "Angrybird is still angry"

 

3. title() : 주어진 문제처럼 알파벳 이외의 문자(숫자, 특수기호, 띄어쓰기) 등으로 나뉘어진
               단어들의 첫 글짜를 모두 대문자로 바꿔준다.

# title()
sentence = "for the last week"
print(sentence.title())

출력결과 >> "For The Last Week"

 

나는 3번 title() 메서드를 사용하여 문제를 풀이했다!

나으 ㅣ 라임나무는 아니고 허접한 나으 ㅣ 코드를 보자! 

 

 

코드 설명

문제의 제한 조건을 보면, 숫자는 항상 단어의 첫 문자로만 나온다는 조건이 있다. 이 점을 이용해서 문제를 풀었는데

첫번째로, title() 메서드를 이용하여 각 단어의 첫 글자를 모두 대문자로 바꿔주었다.

 

주의할 점은 첫 번째 입출력 예의 경우 title() 메서드를 이용하면 3People Unfollowed Me 가 되는데, 숫자 다음에 오는 알파벳은 소문자가 되어야 하므로, 숫자 뒤 문자를 소문자로 바꿔준 후 answer 에 더해준다.

 

두 번째로, 공백이 연속해서 나올 경우에는 else 로 분류가 되어 자동적으로 answer에 더해지므로, 공백이 연속되어 나와도 문제가 없었다.

 

마지막으로 cnt가 주어진 문자열의 총 길이보다 길어지면 out of range index 에러가 나므로, cnt 와 주어진 문자열의 총 길이와 같아진다면 while 문을 나온다. 이렇게 코드를 제출하면,

나의 귀염 뽀짝한 코드도 정답처리가 된 것을 알 수 있다. 파이썬의 장점은.. 알아보기 쉽고, 코드를 압축하여 쉽게 활용할 수 있다는 점인데 아직 나의 코드는 파이썬 스럽지 않다... 이것은 내가 잘 해결해야 할 문제인 것으로.. 이번 문제를 마친다.