Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
var reverse = function (x) {
};
숫자 123이 주어지면 숫자 321을 리턴하고,
숫자 -123이 주어지면 숫자 -321을 리턴하고,
숫자 120이 주어지면 0을 제외한 21만 리턴한다.
숫자의 범위는 -2^31 < 리턴하게 될 값 < 2^31-1 이어야 하고, 조건을 충족하지 않는다면 0을 리턴한다.
var reverse = function (x) {
let MinNum = -2147483648; //-2^31 값
let MaxNum = 2147483647; //2^31-1 값
let result;
let toStringsArrayReverse = x.toString().split("").reverse();
//x=123 이면 toStringsArrayReverse = ["3","2","1"], 숫자에서 문자열배열로
if (toStringsArrayReverse[toStringsArrayReverse.length - 1] === "-") {
//x=-123 이라면 toStringsArrayReverse = ["3","2","1","-"]
let saveNegative = toStringsArrayReverse.pop(); // = "-"
let saveFirstNum = toStringsArrayReverse.shift(); // = "3"
// => toStringsArrayReverse = ["2","1"]
toStringsArrayReverse.unshift(saveNegative + saveFirstNum); //"-3"
// => toStringsArrayReverse = ["-3","2","1"]
result = Number(toStringsArrayReverse.join(""));
// Number([])이라면 NaN이 나오고, join()을 사용해서
//하나의 문자열로 바꿔준다음 Number를 해준다.
if (result > MaxNum || result < MinNum) {
return 0;
}
return result;
} else if (toStringsArrayReverse[0] === "0") {
//x = 120 => toStringsArrayReverse = ["0","2","1"]
toStringsArrayReverse.shift();
//toStringsArrayReverse = ["2","1"]
result = Number(toStringsArrayReverse.join(""));
if (result > MaxNum) {
return 0;
}
return result;
} else {
result = Number(toStringsArrayReverse.join(""));
if (result > MaxNum) {
return 0;
}
return result;
}
};
숫자의 range를 파악하지 못하고 풀다보니
자꾸 return이 0 이되어야 한다고 그래서 좀 헤맸지만
어렵진 않았던것 같다.