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
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가 음수인지를 먼저 판단하고,
음수라면 양수로 만든 후 뒤집고나서 다시 음수로 만들었다.
문제는 어려움 없이 해결했지만, 반복되는 코드가 존재했고 리버스가 아닌 방법은 무엇이 있을지 더 고민을 해봤다.
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가 음수였다면 음수로 양수였다면 양수로 호출한다.