심플하게 개발하기
[리트코드] 7. Reverse Integer 본문
리트코드 7번 문제.
난이도: Medium
문제
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
예시
Example 1:
Input: x = 123
Output: 321Example 2:
Input: x = -123
Output: -321Example 3:
Input: x = 120
Output: 21
답
class Solution:
def reverse(self, x: int) -> int:
sign = -1 if x < 0 else 1
res, x = 0, abs(x)
while x != 0:
res = res * 10 + x % 10
x //= 10
response = res * sign
return response if -1 * 2 ** 31 <= response and response <= 2**31 - 1 else 0
Time Complexity: O(n)
설명
이 문제는 변수 하나를 생성하고 x를 10으로 나누면서 변수에 계속 값을 변경시키면서 최종 값을 만드는 게 포인트다.
먼저 x가 양수인지 음수인지 확인.
변수 res는 0으로 시작, x는 abs(x)로, x가 무조건 양수가 되게끔 바꾼다.
while loop에서는 x는 일의 자리부터 하나씩 지우고 res가 x의 일의 자리를 받는 형식.
예를 들어 x가 -123이면,
시작: x, res = 123, 0
Iteration 1: x, res = 12, 3
Iteration 2: x, res = 1, 32
Iteration 3: x, res = 0, 321
이 된다.
루프에서 빠지면 res에 sign을 붙여주고 (x가 처음에 양수이면 양수, 음수면 음수)
마지막은 res가 알맞은 range에 있는지 확인하고 리턴한다. (예를 들어 x가 처음 2**31 - 1일 경우 (2147483647), 뒤집으면 2**31 - 1보다 큰 수이기 때문에 (7463847412), 리트코드에 의하면 0을 리턴해야 한다.
"Assume the environment does not allow you to store 64-bit integers (signed or unsigned)."
첨언
이 문제는 Top Interview Questions 중 하나로 나올 정도로 정말 유명한 문제 중 하나다. 하지만 그와는 별개로 downvote(싫어요)를 정말 많이 받은 문제이기도 하다. 문제가 많긴 하다.
가장 큰 문제는 의도에 맞지 않게 너무 쉽게 풀 수도 있다는 것이다. 예를 들어 x에 sign만 떼고 string으로 바꾼 뒤 반전시키면 된다.
Ex. sign * reverse(str(abs(x)))
이게 되면 웬만한 leetcode easy 문제보다도 쉽다.
또 하나는 히트코드 자체에서 답의 constraints를 정해놓았다는 것이다. 한마디로 input이 유효해도 output이 input의 constraints를 벗어나면 0을 리턴해야 되는 것인데 이것 때문에 답의 마지막 줄에도 체크가 한번 들어가야 했다.
아무리 문제가 싫어도 어쩔 수 없다. 실제로 이 문제는 인터뷰에도 많이 쓰이고 있기 때문에 무조건 한 번은 풀어봐야 한다.
'코딩공부 > 리트코드' 카테고리의 다른 글
[리트코드] 11. Container with Most Water (0) | 2022.10.14 |
---|---|
[리트코드] 22. Generate Parentheses (0) | 2022.10.06 |
[리트코드] 20. Valid Parentheses (1) | 2022.10.05 |
[리트코드] 5. Longest Palindromic Substring (1) | 2022.09.29 |
[리트코드] 15. 3Sum (0) | 2022.09.27 |