32비트 부호 있는(signed) 정수가 하나 주어졌다고 가정해 보겠습니다. 이 숫자의 자릿수를 거꾸로 뒤집어야 합니다. 예를 들어 숫자가 425라면 출력은 524가 됩니다. 숫자에는 부호가 붙을 수 있으므로 음수도 함께 처리해야 합니다. 따라서 입력이 -425라면 출력은 -524가 되어야 합니다.
문제의 전제 조건
이 문제에서는 값이 32비트 부호 있는 정수 범위 안에 있다고 가정합니다. 유효한 범위는 [-231, 231 − 1], 즉 [-2147483648, 2147483647]입니다. 뒤집은 결과가 이 범위를 벗어나 오버플로우가 발생하면 함수는 0을 반환해야 합니다.
풀이 접근 방식
이 문제는 파이썬의 문자열 슬라이싱을 활용하면 간단하게 해결할 수 있습니다. 풀이 과정은 다음과 같습니다.
- 주어진 정수를 문자열(str)로 변환합니다.
- 문자열의 첫 번째 문자가 '-'인지 확인하여 음수 여부를 판별합니다.
- 음수라면 부호를 제외한 나머지 부분만 뒤집고, 앞에 '-'를 다시 붙입니다.
- 양수라면 문자열 전체를 그대로 뒤집습니다.
- 결과를 정수형(int)으로 변환한 뒤 32비트 정수 범위에 포함되는지 검사하고, 범위를 벗어나면 0을 반환합니다.
파이썬 구현 예제
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = str(x)
if x[0] == '-': # 음수인 경우
a = int('-' + x[-1:0:-1]) # 부호를 제외하고 뒤집은 후 '-'를 붙임
if a >= -2147483648 and a <= 2147483647:
return a
else:
return 0
else: # 양수인 경우
a = int(x[::-1]) # 문자열 전체를 뒤집음
if a >= -2147483648 and a <= 2147483647:
return a
else:
return 0
ob1 = Solution()
print(ob1.reverse(-425))
입력
print(ob1.reverse(-425))
출력
-524
핵심 포인트 정리
- x[::-1] : 문자열 전체를 끝에서부터 처음까지 거꾸로 가져오는 파이썬 슬라이싱 기법입니다.
- x[-1:0:-1] : 마지막 문자부터 두 번째 문자까지만 역순으로 가져옵니다. 첫 번째 문자(부호 '-')를 제외하기 위해 사용됩니다.
- 오버플로우 처리 : 뒤집은 값이 32비트 정수 범위([-2147483648, 2147483647])를 벗어나면 반드시 0을 반환해야 합니다. 이는 코딩 테스트에서 자주 놓치기 쉬운 부분이니 반드시 확인하세요.