reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
예들 들어,
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321
def reverse(number):
x = list(str(number))
y = ''.join((x[::-1]))
if number < 0:
return -int(y[:len(y)-1])
else:
return int(y)
number
를 str()
함수를 통해 문자형으로 바꾼 후 list()
함수를 통해 리스트에 저장[::-1]
리스트 슬라이싱 스텝 사용) 문자열끼리 합침-
가 맨 뒤에 있어서 올바른 반환이 되지 않음int()
함수를 이용해 숫자로 만든 뒤 음수를 붙여 반환int()
함수를 이용한 값을 반환숫자형, 문자형, 리스트의 형변환 함수를 사용하면 쉽게 풀리는 문제였지만, 오로지 숫자만을 이용하여 푸는 방법도 생각해 보았다.(사실 처음에는 이 방법을 생각했었다.)
로직은 다음과 같다.
number
의 각 자릿수의 몫만 추출하여(으로 나눔)number
가 음수일 경우에는, 나눗셈을 통해 추출한 몫의 값이 달라진다.number
를 양수로 만들고, 코드 실행 후 나온 결과값의 음수/양수를 정하는 상수를 선언한 다음 반환할 때 곱해준다.def reverse(number):
minus = 1
result = 0
if number < 0: #number가 음수일 경우를 위한 if문
number *= -1
minus = -1
for _ in range(len(str(number))): #number의 자릿수+1만큼 실행(ex) number == 4321 -> 3번 반복)
result += (number % 10) # result의 number의 1의 자리를 더함 (number == 4321, result == 1)
result *= 10 # 10을 곱함 (result == 10)
number = number // 10 # number를 10으로 나눈 몫으로 변환 number == 432
result //= 10
# for문 2번째 루프시 result == 120 , number == 43
# for문 3번째 루프시 result == 1230 , number == 4
# for문 4번째 루프시 result == 12340 -> 10으로 나눈 몫이 result
return minus * result