쏜의 알고리즘 공부

손성수·2023년 3월 24일
0

JadenCase 문자열 만들기

문제를 풀며 배운 라이브러리

문자열.upper()

  • 해당 문자열을 대문자로 변환한다.
s = "hello"
print(s.upper())
# 출력  = HELLO

문자열.lower()

  • 해당 문자열을 소문자로 변환한다.
s = "HELLO"
pirnt(s.lower())
# 출력 = hello

나의 풀이 방법

  1. 우선 새로 배운 문자열 내장 함수를 익히며 실험했다.
    실험결과, 문자열에 특수문자,숫자,한글이 들어간다 할지라도 문제없이 작동된다.
s="안녕하세요. @#$@#$. hello! lower()!"
print(s.lower())

출력 결과

  1. 완성 코드에 오답을 몇번 겪었는데,
    항상 첫번째 문자열이 알파벳이면 대문자로 변환하고,
    나머지 알파벳은 소문자로 변경해야 한다.

    입출력 예제 1번

    문자열 중간 f의 출력 결과물은 소문자인것을 확인할 수 있다.

나의 답안 코드

def solution(s):
    arr = s.split(' ')
    result =""
    for i in range(len(arr)):
        temp = [j for j in arr[i]]
        for j in range(len(temp)):
            result += temp[j].upper() if j==0 else temp[j].lower()
        result += " " if i != len(arr)-1 else ""
    return result

코드 설명

def solution(s):
    arr = s.split(' ')
    #띄어 쓰기를 기준으로 쪼개서, 리스트에 담고
    result =""
    for i in range(len(arr)):
        temp = [j for j in arr[i]]
        #쪼갠 문자열 '3people'를 또 쪼개서 '3','p'... 하나씩 또 쪼개서
        for j in range(len(temp)):
            result += temp[j].upper() if j==0 else temp[j].lower()
            # 결괏값에 담는데, 첫번째 문자열은 대문자, 나머지 문자열은 소문자로 만든다.
        result += " " if i != len(arr)-1 else ""
        #검증을 통해, 만들어진 문자열 '대문자, 여러 소문자'뒤에 이어질
        #공백(띄어쓰기)를 추가하고, 마지막 값에는 추가하지 않는다. 
        
    return result

더 좋은 풀이

def solution(s):
    answer =[]
    for i in range(len(s.split())):
        answer.append(s.split()[i][0].upper() + s.split()[i].lower()[1:])
    return " ".join(answer)
  • 훨씬더 직관적이고, 연산도 효율적이다.

입력 : "hello world! 33"

for i in range(len(s.split())):

위 코드는 split으로 쪼갠 값을 len 함수에 담고있으며, 값은 3이된다
따라서 반복자 i의 값은 0,1,2로 반복된다.

s.split()[i][0].upper()

위 코드는 쪼갠 문자열의 i번째, 만약 i가 0이라 한다면 "hello"를 검사하게 된다.
"hello"의 0번째 index 'h'를 upper()함수를 애용해 대문자로 추출한다.

 s.split()[i].lower()[1:]

그외 나머지 문자열을 슬라이스를 이용해 소문자로 변경하고

s.split()[i][0].upper() + s.split()[i].lower()[1:]

두 값을 합친다면, "Hello" 가 된다.

새로 배운것과, 나의 느낌

  • upper와,lower라이브러리의 사용 방법을 배웠다.
  • 문제를 제대로 파악하지 못해 여러 시행착오를 겪었는데, 문제 파악이 중요한 것 같다.'
  • 몰랐던 라이브러리와, 디테일한 요소를 요구하는 좋은 알고리즘이였다.
profile
더 노력하겠습니다

0개의 댓글

관련 채용 정보