99클럽 코테 스터디 1일차 TIL + 배열

박채오·2024년 7월 25일
0

항해99

목록 보기
1/4

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

Untitled


오늘의 학습 키워드

  • 문자열
  • 리스트
  • 형변환
  • 슬라이싱

오늘의 회고

어떤 문제가 있었고, 나는 어떤 시도를 했는지

def solution(n):
    answer = []
    while n:
        answer.append(n % 10)
        n //= 10
    return answer
  • 자연수를 10으로 나누고 나머지를 구하는 방식을 사용하려 했습니다.
  • 예를 들어, 12345를 다음과 같이 처리하려 했습니다:
    • 12345 % 10 = 5 (첫 번째 자릿수)
    • 12345 // 10 = 1234 (나머지 숫자)
    • 1234 % 10 = 4 (두 번째 자릿수)
    • 1234 // 10 = 123 (남은 숫자)
    • 이런 식으로 계속...
  • 이 방법은 여러 문제점이 있었습니다:
    • 루프의 종료 조건을 정하기 어려웠습니다.
    • 큰 숫자를 다룰 때 정확도 문제가 발생할 수 있었습니다.

어떻게 해결했는지

def solution(n):
    n = str(n)
    answer = []
    for i in n:
        answer.append(int(i))
    return answer[::-1]

# Test the function directly
print(solution(12345))
  • n을 문자열로 바꿨습니다. ex) 12345 →"12345"
  • "12345"의 각 문자를 하나씩 보면서 다시 정수로 바꿔 새 리스트에 넣었어요. 이렇게 하면 [1, 2, 3, 4, 5]가 됩니다.
  • 이 리스트를 거꾸로 뒤집어서 [5, 4, 3, 2, 1]을 만들었습니다.

무엇을 새롭게 알았는지

  • [::-1]을 사용하면 리스트가 뒤집힌다는 것을 알았습니다.

다른 방법

  1. 리스트 컴프리헨션 :
def solution(n):
    return [int(i) for i in str(n)][::-1]

print(solution(12345))  # 출력: [5, 4, 3, 2, 1]
  • 파이썬의 리스트 컴프리헨션을 사용하면 한 줄의 코드로 압축할 수 있다는 것을 배웠습니다. [int(i) for i in str(n)]이라는 표현식 하나로 문자열 변환, 순회, 정수 변환을 동시에 수행할 수 있습니다.
  • 파이썬의 슬라이싱 기능 [::-1]을 리스트 컴프리헨션과 함께 사용하면, 리스트를 뒤집을 수 있다는 것을 배웠습니다.
  1. reversed() 함수 :
def solution(n):
    return list(map(int, reversed(str(n))))

print(solution(12345))  # 출력: [5, 4, 3, 2, 1]
  • reversed()는 문자열을 뒤집고, map()은 각 문자를 정수로 변환합니다.
  • map(function, iterable): 주어진 함수를 iterable의 모든 요소에 적용
  • reversed() : 역순으로 반환

0개의 댓글