티스토리 뷰

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

 

문제 설명

 

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"

 

접근 방법

결론은 단어의 첫 글자만 대문자로 만들고, 나머지는 소문자로 변환하여 출력하는 문제이다.

* 단어의 첫 글자는 대문자로, 나머지 글자는 소문자로 결합하여 리턴해준다.

 

처음 짠 소스코드(틀린 소스코드)

def solution(s):
    answer = [" "] * len(s)

    for string in s.split():
        # print('string : ', string)
        changeString = ''
        if string[0].isalpha():
            changeString += string[0].upper() + string[1:].lower()
        else:
            changeString += string.lower()

        answer[s.find(string):s.find(string) + len(changeString)] = changeString

    return ''.join(answer)

해당 코드는 틀린 소스코드이다.

 

먼저 S문자열만큼 배열을 선언하여 공백으로 채운뒤에, 찾은 문자열의 첫 번째 스트링만 대문자, 나머지는 소문자로 결합하여 리스트에 변경하여 출력하고자 했다.

 

문제는 python3 find 함수를 이용할 경우 "aaaa aaa"와 같은 문자열에서 "aaa" 문자의 정확한 위치를 찾기 어렵다.

 

따라서 처음부터 다시 생각한 정답 소스코드

from collections import deque
def solution(s):
    answer = ''
    queue = deque(s)
    
    while queue:
        value = queue.popleft()
        if value.isalnum():
            while queue and queue[0] != " ":
                value += queue.popleft()
            answer += value[0].upper() + value[1:].lower()
        else:
            answer += value
                
    return answer

6번 ~ 13번 라인을 유심히 보면 된다.

 

6번 queue가 비어있지 않을 경우 반복

7번 queue의 첫 글자를 value에 담는다.

8번 value가 알파벳 혹은 숫자일 경우

9번 queue가 비어있지 않고, queue의 첫 글자가 공백이 아니면 

10번 변수 value에  queue의 첫 글자를 넣어준다.

11번 queue가 비었거나, 공백일 경우 value 단어의 첫 글자는 대문자, 나머지는 소문자로 answer에 더해준다.

12번 그냥 단순 공백 추가.

 

시간은 오래 걸렸지만 포기하지 않아 뿌듯하다.

 

python3 Document를 찾아보며 알게 된 내용

python3에는 기본적으로 제공하는 편리한 기능들이 많은 것 같다.

출처 : https://docs.python.org/ko/3/library/stdtypes.html#string-methods

 

Built-in Types

The following sections describe the standard types that are built into the interpreter. The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions. Some colle...

docs.python.org

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함