🧩 Algorithm/프로그래머스

[programmers] 자릿 수 더하기, JadenCase 문자열 만들기

nerowiki 2024. 4. 14. 22:37
728x90
💡 오늘의 학습 키워드
- 자릿 수 더하기
- JadenCase 문자열 만들기

 

🥉 자릿 수 더하기

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12931

 

문제 설명

더보기
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한 조건
1. N의 범위 : 100,000,000 이하의 자연수

 

문제 회고

💡 어떤 문제가 있었고, 나는 어떤 시도를 했는지 그리고 새롭게 안 사실은 무엇인지

각설하고 문제 해결 과정을 다음과 같습니다.

  1. 문자열로 변환한 N을 반복문으로 순회합니다.
  2. 다시 정수로 변환하여 리스트에 저장합니다.
  3. 저장된 리스트 원소들의 합을 리턴합니다.

 

💡 내가 해결한 방식은?
def solution(n):
    return sum([int(i) for i in str(n)])

 


🥈 JadenCase 문자열 만들기

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12951

 

문제 설명

더보기
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
1. s는 길이 1 이상 200 이하인 문자열입니다.
2. s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
    2-1. 숫자는 단어의 첫 문자로만 나옵니다.
    2-2. 숫자로만 이루어진 단어는 없습니다.
    2-3. 공백문자가 연속해서 나올 수 있습니다.

입출력 예

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

 

문제 회고

💡 어떤 문제가 있었고, 나는 어떤 시도를 했는지 그리고 새롭게 안 사실은 무엇인지

문제 자체는 직관적으로 그대로 따라가며 풀 수 있었습니다.
split 함수로 단어를 리스트에 분리하여 저장하고, 첫번째 인덱스 문자를 대문자로 변환해주는 로직 구현하면 되는데,
word[0].upper() + word[1:].lower() 코드로 변환 로직을 구성하여 제출하니 일부 TC를 실패했습니다.

 

추측해보았을 때 제한 조건에 공백 문자가 연속해서 나올 수 있는 점을 고려하지 못한 거라고 생각했습니다.
예를 들어 [' ', 'hello', ' ', 'world'] 문자열 처럼 중간 중간 빈 문자열이 들어가 있을 경우 위 코드는 적합하지 않습니다.
그렇다면 어떻게 구현해야 할지 막막했는데, capitalize ( ) 함수를 발견했습니다.
이 함수는 첫 문자만 대문자로 변환해주고 나머지는 그대로 유지합니다. 핵심 기능만 잘 동작하는 함수인 것입니다.

 

반복문과 append를 발견하고 코드를 한번 더 개선해보았습니다.

 

💡 내가 해결한 방식은?
반복문 및 capitalize 함수
def solution(s):
    answer = []

    # 공백 단위로 단어 분리하기
    word_list = s.split(" ") 
    # 숫자가 아니라면 첫번째 인덱스 대문자로 변환
    for word in word_list:
        answer.append(word.capitalize())
        # answer.append(word[0].upper() + word[1:].lower()) 
            
    return ' '.join(answer)
개선된 코드
def solution(s):
    word_list = s.split(" ")
    return ' '.join(word.capitalize() for word in word_list)

 

✍️ TIL

파이썬에는 알게 모르게 편리한 내장 함수가 많이 존재하는 것 같다. 다른 사람의 풀이도 둘러보니
title 이라는 내장함수로 한줄에 끝내는 사람도 있었다. 오늘도 쉬운 난이도의 리스트 구현 문제들이었다.
미뤄둔 것들을 빨리 처리하고 다음 문제는 조금 더 딮한 자료구조를 사용하는 문제들로 찾아봐야지