reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
요구사항 : 숫자의 순서를 뒤집어라.
제한사항 : 음수의 경우에는 뒤집어진 결과에서도 -
가 맨 앞에 와야 한다. 또한 0이 맨 앞에 올 경우엔 0이 생략된다.
인풋 : 숫자
아웃풋 : 순서가 뒤집어진 숫자
반복문을 써야 하나?
0이 생략된다는 부분은 string 타입을 int타입으로 변환할 때 자동으로 해결.
str
함수를 이용해서 string으로 변환한다.range
함수에 세번째 인자값으로 -1
을 넣는 식으로 반대방향으로 할 수 있지만, 새로 배운 reversed
함수를 써봤다.
문자열을 담을 변수(여기선 result
)를 만들고, 반복문 안에서 순서대로 넣는다.
def reverse(number):
if number < 0:
str_num = str(number)[1:] + str(number)[0]
else:
str_num = str(number)
result = ""
for c in reversed(str_num):
result += c
return int(result)
슬라이싱 기법을 생각 못했다. 음수의 경우에는 -
기호를 전체 string에서 슬라이싱한 뒤, 마지막에 int
함수의 결과값에 음수로 만들어줬다.
def reverse(number):
sign = 1
if number < 0:
sign = -1
number = number * -1
result = int(str(number)[::-1]) * sign
return result
두번째 방법과 비슷하지만, 절댓값을 내뱉는abs
함수를 이용해서 음수든 양수든 똑같이 들어갈 수 있게 됐고, 조건문을 깔끔하게 만들었다.
def reverse(number):
result = str(abs(number))[::-1]
if number < 0:
result * -1
return result
string타입으로 변환하지 않고도, 반복문과 연산자만을 이용해서 푸는 방법이 있었다. 숫자의 나머지 연산자(%)와 나눗셈 연산자(//)를 이용하는 것.
반복이 될 때마다 result에는 기존의 result에 10을 곱한 값, 즉 기존값을 한 자리 올려주고, number의 10 나머지를 더한다. 그렇게 되면 숫자안에서만 숫자들을 뒤집을 수 있다.
def reverse(number):
sign = 0
if number < 0:
sign = -1
number = number * -1
else:
sign = -1
result = 0
while number != 0:
result = result * 10 + (number % 10)
number = number // 10
return result * sign
네번째 방법과 사실 같지만, 코드를 더 짧게 하려고 abs함수를 써봤다.
def reverse(number):
result = 0
abs_num = abs(number)
while abs_num != 0:
result = result * 10 + (abs_num % 10)
abs_num = abs_num // 10
if number < 0:
result *= -1
return result
reversed
나 abs
함수.