앞뒤로 뒤집었을때 똑같은 숫자인지 판별
let x = 12121
var isPalindrome = function (x) {
if (x < 0) {
return false
} else {
let strX = x.toString().split('')
let copyStrX = strX.slice()
let newArray = new Array
let i= 0
while( i <strX.length){
let popped = copyStrX.pop()
console.log(popped)
newArray.push(popped)
console.log(newArray)
i ++;
}
let ccX = strX.join()
let ccA = newArray.join()
if (ccX !== ccA) {
return false
} else {
return true
}
}
}
strX===newArray
를 했을 때 계속 결과가 false가 나와서 join을 하고 한 문자로 만들고 비교해보니 true가 나옴 ( 왜 그런지 파악하지 못했음)사용한 js 문법
number.toString()
= int → strarray.length
= 길이 구하기 string.split()
= '123' → ['1','2','3']array.pop()
= ['1','2','3'].pop() → '3'array.join()
= ['1','2','3'].join('') → ['123'] var isPalindrome = function(x) {
let str = x.toString();
let l = 0, r = str.length-1;
while (l < r) {
if (str[l] === str[r]) l++, r--;
else return false;
}
return true;
}
0
, 마지막은 length-1
i는 1씩 + r은 1씩 -
var isPalindrome = function (x) {
return x.toString() === x.toString().split("").reverse().join("");
};
reverse
메서드로 뒤집어서 합친 다음 비교 var isPalindrome = function(x) {
const input = x;
if (x === 0) return true;
if (x < 0 || x % 10 === 0) return false;
let pop,
reverse = 0;
while (x != 0) {
pop = x % 10;
reverse = reverse * 10 + pop;
x = Math.floor(x / 10);
}
return input === reverse;
};
0
일떄는 무조건 true니 true 반환음수
와 10으로 나누떨어지는 경우
는 무조건 false니 false 반환나머지
를 이용해서 pop 메서드를 사용하지 않고 가져옴 reverse
변수를 이용해서 뒤집어진 숫자를 새로이 만들어준다.- 곱하기 10
을 통해서 한자리 앞으로 밀고 뒤에 새로이 들어갈 일의 자리를 만듦Math.floor
를 통해서 한 자리씩 낮춘다. reverse
는 점점 늘어나고 x
는 점점 줄어든다.