[leetcode] JS - Reverse Integer

sarang_daddy·2023년 1월 18일
0

문제

LeetCode - Reverse Integer
32비트 정수 x가 주어진다.
리버스 했을때 리버스 값을 호출하라.
32비트 범위(-2^31 <= x <= 2^31 - 1)를 벗어나면 return 0.

Ex)
Input: x = 123
Output: 321

Input: x = -123
Output: -321

Input: x = 120
Output: 21

풀이 1

var reverse = function (x) {
  let answer = Number(("" + x).split("").reverse().join(""));

  if (x < 0) {
    answer = Number(("" + x * -1).split("").reverse().join("")) * -1;
  }

  if (answer < Math.pow(-2, 31) || answer > Math.pow(2, 31) - 1) {
    answer = 0;
  }
  return answer;
};

처음에는 x값을 리버스를 사용해서 뒤집어야 겠다고 생각했다.
음수의 경우 -가 뒤로 가면 NaN이 되기에 x가 음수인지를 먼저 판단하고,
음수라면 양수로 만든 후 뒤집고나서 다시 음수로 만들었다.

문제는 어려움 없이 해결했지만, 반복되는 코드가 존재했고 리버스가 아닌 방법은 무엇이 있을지 더 고민을 해봤다.

풀이 2

var reverse = function (x) {
  let answer = Math.abs(x).toString().split("").reverse().join("");
  if (answer > 2 ** 31) return 0;
  return x > 0 ? answer * 1 : answer * -1;
};

Math 메서드를 활용하는 방법으로 풀어 보았다.
음수인 경우를 최종판단으로 미루고, Math.abs()로 절대값을 만들면 중복되던 코드가 없어진다. 뒤집은 값에 x가 음수였다면 음수로 양수였다면 양수로 호출한다.

알아가는 지식 🧐

  • Math.abs() : 절대값
  • Math.sign() : 양수면 1 / 음수면 -1 / 0이면 0
  • Math.pow(2,31) -> (2**31)로 가능하다.
profile
한 발자국, 한 걸음 느리더라도 하루하루 발전하는 삶을 살자.

0개의 댓글