본문 바로가기

개발일지/TIL

TIL 23-04-02

1. 프로그래머스 알고리즘 문제 LV2 -  JadenCase 문자열 만들

 문제점

# JadenCase 문자열 만들기
# 문제 설명
# JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
# 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

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

공백을 기준으로 문자열 나누기

capitalize를 통해서 대문자로 바꾸기

시도해 본 것들

.split()을 통해서 문자열을 나누기

.capitalize()를 사용해서 대문자로 바꿔주기

def solution(s):
    answer = ''
    str_list = []
    # 공백을 기준으로 문자열 나누기
    str_list.append(s.split())
    # capitalize를 통해서 대문자로 바꾸기
    for i in range(len(str_list)):
        str_ = str(str_list[i])
        answer += str_.capitalize()
    return answer


print(solution("3people unFollowed me"))

# 출력 ['3people', 'unfollowed', 'me']

''이 섞여있고, 앞의 알파벳이 소문자로 출력됨

 

def solution(s):
    answer = ''
    str_list = []
    # 공백을 기준으로 문자열 나누기
    str_list = s.split()
    print(str_list)
    # capitalize를 통해서 대문자로 바꾸기
    for i in range(len(str_list)):
        str_ = str(str_list[i]+' ')
        answer += str_.capitalize()
    return answer
    
    # 출력 3people Unfollowed Me <- 끝에 띄어쓰기 하나

코드를 살펴보며 split()을 append 할 필요가 없을 것 같아서 바꿔줬더니 capitalize()도 먹히고 내가 생각한 결과가 나왔다.

하지만 끝에서 공백이 나오면서 결과가 조금 달랐다. 

 

for i in range(len(str_list)):
        if i == 0:
            str_ = str(str_list[i])
        else:
            str_ = str(' ' + str_list[i])
        answer += str_.capitalize()

간단한 해결 방법으로 i가 0일때는 띄어쓰기가 없고 그 이외에는 앞에서 ' '를 추가했더니 capitalize()가 무시당했다.

 

def solution(s):
    answer = ''
    str_list = []
    # 공백을 기준으로 문자열 나누기
    str_list = s.split()
    # capitalize를 통해서 대문자로 바꾸기
    for i in range(len(str_list)):
        str_ = str(str_list[i])
        if i == 0:
            answer += str_.capitalize()
        else:
            answer += ' ' + str_.capitalize()
    return answer

테스트 케이스는 통과했는데 제출했을 때 오답이 나왔다.

공백이 연속 두번 이상 나올 수 있다는 것을 보고 띄어쓰기를 추가한 테스트 케이스를 만들어보자 여기서 문제가 발생했다.

 

 

['3people', 'unFollowed', 'me']

print()문을 찍어보며 확인한 결과

split()으로 list로 만드는 과정에서 공백을 늘려도 다 무시해 버린 것을 찾았다.

그래서 split(' ')으로 기준을 제시했다.

 해결 방법

def solution(s):
    answer = ''
    str_list = []
    # 공백을 기준으로 문자열 나누기
    str_list = s.split(' ')
    # capitalize를 통해서 대문자로 바꾸기
    for i in range(len(str_list)):
        str_ = str(str_list[i])
        # 첫번째는 ' ' 없이 추가하기
        if i == 0:
            answer += str_.capitalize()
        else:
            answer += ' ' + str_.capitalize()

    return answer


print(solution("3people unFollowed me"))
print(solution("3people unFollowed   me"))

if문 없이 만들 수도 있을 것 같은데 아직은 잘 모르겠다.

vscode같은 편집기 없이 웹에서 풀려면 python과 더 친해져야겠다.

 알게 된 점

split()으로 사용하면 공백이 아무리 많아도 다 무시하고 결과를 출력해준다.

split(' ')으로 만들면 공백이 하나 추가 될 경우 ' '로 만들 수 있다.

capitalize()는 첫 번째 문자를 대문자로 바꿔준다. 

 

 

'개발일지 > TIL' 카테고리의 다른 글

TIL 23-04-04  (0) 2023.04.04
TIL 23-04-03  (2) 2023.04.03
TIL 23-04-01  (0) 2023.04.01
TIL 23-03-31  (0) 2023.04.01
TIL 23-03-30  (0) 2023.03.30