<Medium> Reverse Integer (LeetCode : C#)

이도희·2023년 2월 25일
0

알고리즘 문제 풀이

목록 보기
18/185

https://leetcode.com/problems/reverse-integer/

📕 문제 설명

signed 32 비트 정수 x가 주어질 때, 자릿수 뒤집어서 반환하기

32 비트 범위 넘어가면 0 반환

(64비트 정수 저장이 안되는 환경으로 가정 -> 즉, int로 제한 범위 비교 시도시 에러)

  • Input
    부호 존재하는 32 비트 정수 x
  • Output
    x 자릿수 뒤집어서 반환 (int)

예제

풀이

  1. 주어진 정수 string으로 변환하기
  2. 음수면 '-' 제외한 숫자 부분만 string으로 남기기 + isSigned = true
  3. 32 비트 숫자 범위 넘어가면 0 바로 반환
  4. 변환된 정수 뒤집 (with StringBuilder)
  5. 만약 뒤집은 문자열의 길이가 10이면 (제한범위 걸릴 수 있음) 제한 범위 확인 (여기서 걸리면 0 반환)
  6. 제한 범위 내의 숫자면 뒤집은 문자열 int로 변환 (음수였다면 - 붙여서 반환)
public class Solution {
    public int Reverse(int x) {
        string s = x.ToString();
        bool isSigned = false;

        if(s[0] == '-')
        {
            isSigned = true;
            s = s.Substring(1, s.Length - 1);
        }

        if (s.Length > 10) return 0;

        StringBuilder sb = new StringBuilder(); // 참조메모리 덜 차지 위함

        for(int i = s.Length - 1; i >= 0; i--) //끝자리부터 돌아서 문자열 역전
        {
            sb.Append(s.Substring(i,1)); 
        }

        string rs = sb.ToString();

        if (rs.Length == 10)
        {
            string rightLimit = (Math.Pow(2, 31) - 1).ToString();
            string leftLimit = (Math.Pow(2, 31)).ToString();
            if (isSigned)
            {
                for(int i = 0; i < 10; i++)
                {
                    if (rs[i] < leftLimit[i]) break;
                    if (rs[i] > leftLimit[i]) return 0; 
                }
            }
            else
            {
                for(int i = 0; i < 10; i++)
                {
                    if (rs[i] < rightLimit[i]) break;
                    if (rs[i] > rightLimit[i]) return 0; 
                }
            }
        }

        int answer = int.Parse(rs);
        if (isSigned) answer *= -1;

        return answer;

    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글