JSITCLUB

파이썬 - 프로그래머스 - 자연수 뒤집어 배열로 만들기 본문

파이썬/문제풀이

파이썬 - 프로그래머스 - 자연수 뒤집어 배열로 만들기

jsitclub 2020. 7. 23. 23:47

프로그래머스 level 1

문제 설명

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

제한 조건

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

입출력 예

n return
12345 [5,4,3,2,1]

 

 

코딩테스트 연습 - 자연수 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345

programmers.co.kr

 

 

풀이 및 코드

문제 요약 

뒤집힌 순서의 리스트 만들기

 

문제 해설

이 문제도 지난번에 고민했던 숫자 하나씩 가져오는 것을 이용하면 간단히 풀릴 겁니다.

문제에서 요구하는 순서를 뒤집는 것 역시 처음 접하면 조금 당황스럽지만, 이것 역시 조금만 생각하면 간단합니다.

 

순서를 뒤집는 방법에는 어떤 방법이 있을까?

먼저 가장 간단한 방법은 값을 뒤쪽에서 빼서 새로운 곳에 넣는 것입니다.

n     : 1 2 3 4 5   

결과 : 

 

n     : 1 2 3 4  

결과 : 5 

 

n     : 1 2 3  

결과 : 5 4

 

n     : 1 2  

결과 : 5 4 3

 

n     : 1 

결과 : 5 4 3 2

 

n     : 

결과 : 5 4 3 2 1

 

 

또 다른 방법은 맨뒤와 맨 앞의 값을 서로 바꾸는 방법입니다.

 

n : 1 2 3 4 5   (1과 5를 바꿉니다.)

n : 5 2 3 4 1    (2와 4를 바꿉니다.)

n : 5 4 3 2 1

 

이렇게 보면 위에서 보는 것처럼 작업을 반만 해도 되니 두 번째 방법이 첫 번째 방법보다는 효율적이라고 생각하겠죠?

 

하지만 문제에서는 n이 10,000,000,000 이하인 자연수라고 했습니다. 그 말은 첫 번째 방법을 아무리 많이 해도 11번 정도라는 이야기죠. 그것의 절반이니 반올림해도 6번.

 

사실 6번이나 11번이나 컴퓨터에게는 거의 차이가 없는 작업이니까 효율적이라고 하기는 좀 민망하죠.

 

 

그리고 마지막 방법으로는 리스트의 reverse() 메서드를 사용하는 방법입니다.

 

 

 

결과코드 

코드는 각각 다음과 같습니다.

또다시 말씀드리지만, 그냥 보시는 것은 실력에 아무런 도움이 안 됩니다. 세 가지 방법을 직접 고민해서 풀어보고 다른 사람은 어떻게 짜나 비교용으로 보세요.

또 어떤 방법이 좋을까도 고민해 보시고, 선택해 보세요.

 

첫 번째 방법

def solution(n):
    answer=[]
    while(n>0):
        answer.append(n%10)
        n//=10
    return answer

 

두 번째 방법

def solution(n):
    answer=list(str(n))
    i=-1
    for i in range(len(answer)//2):
        answer[i],answer[-(i+1)] = int(answer[-(i+1)]), int(answer[i])

    if len(answer)%2!=0:
        answer[i+1]=int(answer[i+1])
    
    return answer

 

세 번째 방법

def solution(n):
    answer=list(str(n))
    answer.reverse()
    return list(map(int,answer))

 

 

 

성공

오늘도 수고하셨습니다.

Comments