알고리즘

LeetCode 7. Reverse Integer

쿠키는 서비스 2025. 1. 2. 14:00
반응형

단순하게 integer을 거꾸로 뒤집는 문제

js 문자열 함수 등을 활용해서 풀면 된다

근데 범위를 넘어가지 않아야해서 체크해주는 로직이 필요하다

/**
 * @param {number} x
 * @return {number}
 */
// 시간복잡도 O(N), 공간복잡도 O(N)
var reverse = function (x) {
  // 32비트 정수의 범위
  const MIN = -Math.pow(2, 31); // -2147483648
  const MAX = Math.pow(2, 31) - 1; // 2147483647

  let isMinus = false;
  if (x < 0) {
    isMinus = true;
    x *= -1;
  }

  let y = x.toString();
  let z = y.split('').reverse().join('');
  let num = parseInt(z);

  // 부호 복구
  if (isMinus) num = -num;

  // 범위를 벗어난 경우 0 반환
  if (num < MIN || num > MAX) {
    return 0;
  }

  return num;
};

console.log(reverse(-123));

 

시간 복잡도가 상당해서 gpt한테 개선해달라 했더니 아래와 같은 코드가 나옴

/**
 * @param {number} x
 * @return {number}
 */
// 시간복잡도 O(log|x|), 공간복잡도 O(1)
var reverse = function (x) {
  // 32비트 정수의 범위
  const MIN = -Math.pow(2, 31); // -2147483648
  const MAX = Math.pow(2, 31) - 1; // 2147483647

  let reversed = 0; // 결과값 저장 변수

  // x가 0이 아닐 때까지 반복
  while (x !== 0) {
    // 마지막 자리 숫자 추출
    const digit = x % 10;

    // x에서 마지막 자리 제거 (| 0은 정수로 만듬)
    x = (x / 10) | 0;

    // 범위를 초과하지 않도록 체크
    if (reversed > Math.floor(MAX / 10) || (reversed === Math.floor(MAX / 10) && digit > 7)) return 0;
    if (reversed < Math.ceil(MIN / 10) || (reversed === Math.ceil(MIN / 10) && digit < -8)) return 0;

    reversed = reversed * 10 + digit;
  }

  return reversed;
};

console.log(reverse(-123));

 

반응형

'알고리즘' 카테고리의 다른 글

프로그래머스 위클리 챌린지 1주차(JavaScript)  (0) 2021.08.31