reverse
함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 반환하는 프로그램을 작성해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
다음 예시를 보면, x를 인자고 받고 return값을 반환합니다.
x
: 1234
return
: 4321
x
: -1234
return
: -4321
x
: 1230
return
: 321
처음 문제를 분석하면서 List의 index를 활용하여 푸는 방식으로 접근하였습니다.
하지만 Python
에는 방대하고 쉬운 method가 내장되어 있습니다.
우선, 내장함수와 List의 슬라이싱을 통해 풀이한 첫번째 코드는 다음과 같습니다.
def reverse(number):
if number > 0 :
over_zero = str(number)[::-1]
return int(over_zero)
else :
under_zero = str(-number)[::-1]
return int(-under_zero)
여기서 list를 슬라이싱하는 부분에 대해 알아보면,
[
시작index
:n번째 값
:간격
]
다음과 같은 형식을 지니는데요
만약 다음과 같은 배열이 있다고 가정하고, 세가지 방법으로 슬라이싱 해보겠습니다.
list = [1, 2, 3, 4, 5]
1) list[:] >>> [1 ,2 ,3 ,4 ,5]
시작 index를 명시하지 않으면 index=0인 값부터 시작합니다.
마지막 값을 명시하지 않으면 배열의 마지막 값까지 슬라이싱을 합니다.
2) list[2:4] >>> [2, 3, 4]
index가 2인 값부터 배열의 네번째 값까지 슬라이싱을 합니다.
3) list[::-1] >>> [5, 4, 3, 2, 1]
시작index부분에 4를 기입하여 역순을 더욱 명확하게 지정할 수 있습니다.
간격이 -1인 경우 슬라이싱의 방향이 반대로 진행됩니다.
시작 index
= "" >> index=0 >>1
n번째 값
= "" >> 마지막 값 >>4
간격
= -1 >> 시작 index부터 좌측으로, index가 0이라면 마지막 값으로 슬라이싱
def reverse(number):
set_number = str(abs(number)) #음수일 때 - 기호를 없애고 for loop를 위해 문자열로 변환
new_num_list = []
reversed_list = []
# 정수의 각 자리수의 수를 원소로 가지는 리스트 생성
for n in set_number :
new_num_list.append(n)
# 리스트의 길이만큼 가장 마지막 원소부터 빼내고,
# 새로운 리스트에 기존 리스트의 역순으로 원소 추가하기
for i in range(len(new_num_list)) :
reversed_list.append(new_num_list.pop())
# 뒤집어진 새로운 원소들을 모두 합치는 과정
# 가장 윗부분에서 문자열로 변환했기 때문에 다시 정수로 변환
result = int("".join(reversed_list))
# 인자로 받는 정수의 절댓값으로 result를 반환하기 때문에
# 인자가 음수일 경우 처리하는 조건문
if (number < 0 ) :
return -result
else:
return result
각 자리의 수를 각 자리수(1, 10, 100, 1000 ... )로 나눈 나머지를 활용하여 숫자를 뒤집을 수도 있을 것 같습니다.
좀 더 고안해보고 코드를 추가해보겠습니다.