코딩테스트/LeetCode

[LeetCode] Reverse Integer 풀이 및 후기

juundev 2024. 6. 21. 14:12

개요

LeetCode
문제 명 Reverse Integer
난이도 Medium
체감 난이도 Easy
풀이 시간 15분 정도

 

문제 설명

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).

 

주어진 32비트 정수 x의 자릿수를 뒤집어서 반환하라.

만약 뒤집은 값이 32비트 정수 범위인 [-2^31, 2^31 - 1]를 벗어난다면 0을 반환하라.

64비트 정수를 사용할 수 없다고 가정하라.

 

입출력 예시

입출력 예시 1
입력 값 x = 123
기대 값 321
설명 정수 123을 뒤집어 321을 출력하라
입출력 예시 2
입력 값 x = -123
기대 값 -321
설명 정수 -123을 뒤집어 -321을 출력하라
입출력 예시 3
입력 값 x = 120
기대 값 21
설명 정수 120을 뒤집어 21을 출력하라, 정수 표현식에 의해 0은 사라짐

 

제약 조건

제약 조건

 

풀이

해당 문제의 난이도는 Medium으로 표기되어 있었지만, 본인 입장에서는 Easy 난이도였다.

왜냐하면 코딩테스트 유형 중에서도 흔한 유형에 속하는 문제이고, 알고리즘에 접근하기 쉬웠기 때문이다.

 

하지만, 문제가 쉽다고 한들 이 문제의 관건은 "얼마나 효율적으로" 해결하는지 일 것이다.

본인은 효율적으로 문제를 해결하지는 못했다.

 

제출한 코드

class Solution:
    def reverse(self, x: int) -> int:
        # 32비트 정수 범위 설정
        minimum, maximum = -2147483648, 2147483648
        
        # 결과를 저장할 문자열 초기화
        result = ""
        
        # 입력 정수가 음수인지 확인
        isNegative = True if str(x)[0] == "-" else False
        
        # 문자열로 변환된 x의 시작 인덱스와 끝 인덱스 설정
        start = len(str(x)) - 1
        end = 0 if isNegative else -1
        
        # 끝에서부터 시작까지 거꾸로 돌면서 문자를 결과에 추가
        for i in range(start, end, -1):
            result += str(x)[i]
        
        # 결과를 정수로 변환하고, 원래 숫자가 음수였으면 부호를 붙임
        result = -1 * int(result) if isNegative else int(result)
        
        # 결과가 32비트 정수 범위를 벗어나면 0을 반환
        return 0 if result < minimum or result > maximum else result

 

위는 테스트에 통과된 코드이다.

 

결과 화면

 

 

회고

본 문제의 풀이 과정은 코드에서 주석으로 확인할 수 있다.

이번 문제는 별다른 어려움 없이 가볍게 해결할 수 있었다.