JSITCLUB
파이썬 - 프로그래머스 - 자연수 뒤집어 배열로 만들기 본문
프로그래머스 level 1
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
-
n은 10,000,000,000이하인 자연수입니다.
입출력 예
n | return |
12345 | [5,4,3,2,1] |
풀이 및 코드 |
문제 요약
뒤집힌 순서의 리스트 만들기
문제 해설
이 문제도 지난번에 고민했던 숫자 하나씩 가져오는 것을 이용하면 간단히 풀릴 겁니다.
문제에서 요구하는 순서를 뒤집는 것 역시 처음 접하면 조금 당황스럽지만, 이것 역시 조금만 생각하면 간단합니다.
순서를 뒤집는 방법에는 어떤 방법이 있을까?
먼저 가장 간단한 방법은 값을 뒤쪽에서 빼서 새로운 곳에 넣는 것입니다.
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))
오늘도 수고하셨습니다.
'파이썬 > 문제풀이' 카테고리의 다른 글
파이썬 - 프로그래머스 - 문자열 내림차순으로 배치하기 (2) | 2020.07.28 |
---|---|
파이썬 - 프로그래머스 - 정수 내림차순으로 배치하기 (0) | 2020.07.28 |
파이썬 - 프로그래머스 - 약수의 합 (0) | 2020.07.23 |
파이썬 - 프로그래머스 - 자릿수 더하기 (0) | 2020.07.22 |
파이썬 - 프로그래머스- 이상한 문자 만들기 (0) | 2020.07.21 |