반응형
단순하게 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 |
---|