7. Reverse Integer

JAY KIM·2021년 4월 7일
0

LeetCode

목록 보기
2/3

문제 링크
https://leetcode.com/problems/reverse-integer/

문제 접근

입력받은 정수를 순서를 뒤집어서 정수 형태로 반환하는 문제이다.
단, 음수일 경우 그대로 음수로 반환하고, 0일 경우 0을 반환한다.
그리고 끝자리가 0인 경우는 끝에서 2번째 숫자부터 시작한다.
즉, 10을 가지고 입력받은 정수를 계산하여 값을 도출한다.

Pseudocode

  1. 변수 생성
    • 결과를 저장할 변수 생성
  2. 로직
    • 입력받은 정수가 0이 될 때까지 반복
    • 생성한 변수 = (자기 자신 X 10) + (입력받은 정수 % 10)
    • 입력받은 정수 = 자기 자신 / 10
    • 32-bit 정수 길이를 만족하는지 검사
    • 결과 리턴

내가 삽질한 부분

나는 문제 파악을 빠르게 했고, 로직에 자신이 있어서 빠르게 접근했다.
하지만, 이런 행동이 내가 이번 문제 푸는 과정에서 오류를 만들었다.

If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0.

나는 이 부분을 제대로 읽지 않고 지나쳤다.
그래서 처음에는 변수를 int형으로 선언하고 계산을 했고, 그 결과 이 Runtime Error 를 보게 됐다.

runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type 'int' (solution.cpp)

나는 문제점을 바로잡기 위해서 int 자료형 대신 long 자료형을 사용했다.

  int reverse(int x) {
    long result = 0;

    while (x != 0) {
      result = (result * 10) + (x % 10);
      x = x / 10;
    }

    if (result > INT_MAX || result < INT_MIN) result = 0;
    // INT_MAX 와 INT_MIN 은 <limits.h>에 정의되어 있다.

    return result;
  }

결과

최종결론

문제를 제대로 읽지 않고 틀리는 실수는 아직도 반복하고 있다는 걸 다시 느끼게 됐다..
실수를 반복하면 실력이랬던가,,,, 이런 실력은 필요 없는데 말이다,,
문제 난이도가 쉬워도 영어공부 한다고 생각하고 천천히 문제를 읽고, 모든 요구사항을 제대로 파악하자.
그리고 자만심은 절대 NEVER !!

profile
JAY's Digging Log

0개의 댓글