[프로그래머스] Lv1. 자연수 뒤집어 배열로 만들기

1 분 소요

문제

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

제한 조건

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

나의 풀이:

def solution(n):
    answer = []
    for i in n:
        answer.append(i)
    answer.sort(reverse = True)
    return answer

첫번째 시도. 결과가 [‘5’, ‘4’, ‘3’, ‘2’, ‘1’] 형태로 나오고, 역순으로 정렬이 되기 때문에 다른 숫자를 넣을 경우 단순히 순서를 뒤집는 것이 아니라 무조건 큰 숫자부터 앞에 오는 식으로 정렬이 되어서 맞지 않다.

def solution(n):
    n = str(n)
    answer = [0]*len(n)
    x = -1
    for i in n:
        i = int(i)
        answer[x]=i
        x-=1
    return answer

조금 지저분하지만 생각나는대로 빠르게 문제를 풀었다.

각 자리 별로 리스트에 넣기 위해 우선 정수 n을 문자열로 만들고 정답이 될 리스트를 len(n)으로 곱하여 숫자 자리수만큼 자리를 만들어주었다.

그 다음 각 숫자를 문자에서 다시 정수로 만들어준뒤 answer[-1] 부터 역순으로 삽입해준다.

이렇게 풀었을 때 효율성은 평균 0.02ms가 나왔다.

다른 사람들의 풀이:

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

내가 처음에 접근했던 방식에 가장 유사한 풀이. 리스트 순서를 뒤집어주기만 하는 reverse() 함수가 있는 줄 몰랐다.

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

위 코드를 훨씬 더 간결하게 작성한 예. [ : : -1], 처음부터 끝까지 -1 스텝으로 인덱스 슬라이싱을 하는 방법을 사용하여 간단하게 뒤집었다. 왜 이걸 생각하지 못했을까?

def digit_reverse(n):
    return list(map(int, reversed(str(n))))

가장 좋아요를 많이 받은 풀이. 나는 두번째 풀이가 더 좋다고 생각하지만 map 함수의 사용법도 익히면 좋을 듯하다.

map 함수는 map(적용시킬 함수, 반복가능한 자료형) 형태로 사용하며, 리스트나 튜플의 값들에 공통적으로 지정된 함수를 적용시키는 함수라고 보면 된다. map 함수의 반환값은 map객체이기 때문에 해당 자료형을 list 또는 tuple로 변환시켜주어야 한다.

위 풀이는 reversed된 str(n)에 int() 함수를 모두 적용시켜 리스트로 만들었다고 보면 된다.

댓글남기기