1일 1코딩 - leetcode 9.isPalindrome

앞뒤로 뒤집었을때 똑같은 숫자인지 판별

내 풀이


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
    }
  }
  
}
  • 숫자를 str으로 만들고 그 만든 숫자를 뒤에서부터 pop해서 새로운 array에 push하고 기존 array와 비교
  • 기존 arr을 reference해서 새로 copyStrX를 만듦
  • strX===newArray를 했을 때 계속 결과가 false가 나와서 join을 하고 한 문자로 만들고 비교해보니 true가 나옴 ( 왜 그런지 파악하지 못했음)
  • 빈 배열을 많이 선언해서 메모리 누수가 있고 속도도 느림

사용한 js 문법

  • number.toString() = int → str
  • array.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씩 -

reverse메서드 사용

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는 점점 줄어든다.

좋은 웹페이지 즐겨찾기