[Leetcode] 7. Reverse Integer
[Leetcode] 7. Reverse Integer

[Leetcode] 7. Reverse Integer

카테고리
📚 Algorithm
작성자
박용성박용성
작성일
2024년 08월 02일
태그
Python
Leetcode
Slug
Leetcode-7
floatFirstTOC: right

🖥️ 시작하며

입력받은 숫자를 거꾸로 출력하는 문제다. 맨 뒤 숫자가 0이라면 이는 생략한다.
 
파이썬에서는 간단하게 풀 수 있다. 어차피 범위도 int 형으로 주어졌기 때문에, 그냥 예외처리를 한 후 str 로 변환한 문자열을 뒤집은 후 다시 int 형으로 바꾸면 된다.
 
C++은 수학적으로 접근하면 된다. x가 남지 않을 때까지 10으로 나눠서, 그 나머지를 곱해주면 된다.
 

⚙️ Python

class Solution: def reverse(self, x: int) -> int: # 오류 범위 정의 INT_MAX = 2**31 - 1 INT_MIN = -(2**31) # 음수인지 확인 sign = -1 if x < 0 else 1 x = abs(x) # 숫자 뒤집고 부호 적용 reversed_number = int(str(x)[::-1]) * sign # 오버플로우 검사 if reversed_number < INT_MIN or reversed_number > INT_MAX: return 0 return reversed_number if __name__ == "__main__": sol = Solution() print(sol.reverse(123)) # 321
 

⚙️ C++

class Solution { public: int reverse(int x) { int result = 0; while (x != 0) { int pop = x % 10; x /= 10; // 오버플로우 체크 if (result > INT_MAX / 10 || (result == INT_MAX / 10 && pop > 7)) return 0; if (result < INT_MIN / 10 || (result == INT_MIN / 10 && pop < -8)) return 0; result = result * 10 + pop; } return result; } };
  • 321가 들어갔을 때:
    • pop 에 10으로 나눈 나머지를 삽입, 처음 시퀀스에서 1
    • 이후 오버플로우를 체크한 후, result 에 10을 곱한 후 pop 을 더함
      • 첫 시퀀스에서는 0 * 10 + 1 = 1
    • x 가 0이 될 때까지 반복
      • 두 번째 시퀀스부터 1 * 10 + 2 = 12 , 12 * 10 + 3 = 123 식으로 이어나감
 

📌 소감

댓글

guest