-
[프로그래머스 2단계] 알고리즘 20. 자연수를 뒤집어 리스트로 만들기24년 11월 이전/레거시-알고리즘(3) 2018. 4. 5. 11:25반응형
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 20. 자연수를 뒤집어 리스트로 만들기
digit_reverse함수는 양의 정수 n을 매개변수로 입력받습니다. n을 뒤집어 숫자 하나하나를 list로 표현해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴하면 됩니다.
def digit_reverse(n):# 함수를 완성해 주세요return ''# 아래는 테스트로 출력해 보기 위한 코드입니다.print("결과 : {}".format(digit_reverse(12345)));풀이 :
이번 문제의 핵심은 자연수를 자릿수마다 리스트를 만든 후에 뒤집으면 된다. 제일 간단한 방법으로는 다음 방법이 있다.
def digit_reverse(n):return [int(i) for i in str(n)][::-1]바로 정수를 str()로 문자열로 바꾼 후에 for 컴프리헨션으로 순회하여 리스트로 만들어주면 된다. 다만
[i for i in str(n)]
을 하게 되면 ['1', '2', '3', '4', '5'] 이런 문자열들의 리스트가 된다. for 컴프리헨션 반환값을 숫자로 만들어주기 위해서는 int()를 쓰자.
[int(i) for i in str(n)]
그리고 리스트를 역으로 바꾸기 위해서는 대표적으로 reversed 함수와 [::-1]이 있다. 둘 다 리스트를 거꾸로 바꾼 리스트를 반환하니 둘 중 하나를 써도 상관은 없다.
[int(i) for i in str(n)][::1]
이렇게 풀면 별로 기존 문제들 설명을 들은 사람이라면 얻어갈게 없을테니 이번엔 다른 방법을 제시해보겠다. 코드는 다음과 같다.
def custom_range(n, step=10):while n > 0:yield n % stepn //= stepdef digit_reverse(n):return [ i for i in custom_range(n)]이번에는 yield 를 이용하여 사용자 정의 range 함수를 만드는 것이다. custom_range 함수는 개발자가 정의한 식에 따라 반복자가 돌 수 있는 Generator를 반환시킨다. Generator란 예를 들어 range(1, 10)이라 할 때 1부터 10까지 i가 돌 수 있는 컨테이너를 만들어준다. 이것이 바로 Generator이다. custom_range는 1의 자리 수를 뱉고 n을 10으로 자꾸 나누어준다. 즉 예에서 12345가 들어오면 5 -> 4 -> 3 -> 2 -> 1 을 내뱉는 Generator를 반환시킨다. 따라서 위 digit_reverse 함수는 이 Genrator를 순회하여 리스트 [5, 4, 3, 2, 1] 을 반환시켜준다. 필자도 파이썬에 대해 깊은 조예가 있는 것이 아니기 때문에 generator와 yield에 대한 자세한 설명은 구글링을 쳐보는것을 강추한다.
728x90'레거시 > 레거시-알고리즘(3)' 카테고리의 다른 글
[프로그래머스 2단계] 알고리즘 22. 정수 내림차순으로 배치하기 (0) 2018.04.06 [프로그래머스 2단계] 알고리즘 21. 괄호 확인하기 (0) 2018.04.06 [프로그래머스 2단계] 알고리즘 19. 소수 찾기 (0) 2018.04.04 [프로그래머스 2단계] 알고리즘 18. 콜라츠 추측 (0) 2018.04.03 [프로그래머스 1단계] 알고리즘 17. 최솟값 만들기 (0) 2018.04.02