logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

[LeetCode] Palindrome Number

[LeetCode] Palindrome Number
CodingTest
성훈 김
2025년 8월 25일
목차

문제 링크

문제 요구 조건

문제는 숫자가 Panlindrome 숫자인지 판별하는 문제이다. Panlindrome 숫자란 중앙에서 부터 양끝으로 대칭이 되는 숫자를 말한다.
 
입력값은 number이고 반환값은 boolean이 되면 된다.
 

나의 문제 풀이

결론적으로 문제를 30분내에 풀지 못했다. 계속 왜 안되지하고 생각했었는데, 변수를 잘못 넣어서 안된 것이었다. ㅠ 코드는 다음과 같다.
 
나의 문제풀이
JavaScript
/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function (x) {
    if (x < 0) return false;
    const j = x.toString();

    for (let i = 0; i < x.length; i++) {
        const p = j.length - i - 1;

        if (i > x.length / 2) break;
        if (x[i] !== x[p]) {
            return false;
        }
    }
    return true;
};
  1. x가 음수라면 panlindrome이 성립하지 못하므로 제일 처음에 반환했다.
  1. 그리고 문자열로 변환
  1. 숫자의 길이를 체크하고 i가 커질수록 제일 마지막 인덱스에서 점차 작아지는 인덱스 j를 정의한다.
  1. length의 반을 순회하면 for문을 빠져 나온다.
  1. 검증중에 두 숫자가 다르다면 바로 false를 리턴
 

피드백

로직은 맞는 거 같은데, 변수를 잘못 연결해서 제대로 동작하지 않았다.
 

정답 문제 풀이

정답을 보면 일단 로직의 방향성은 맞았구나라고 생각한다. 하지만 이번 기회에 배울수 있었던 것은
  • number는 length함수를 사용하지 못한다.
  • length의 반만 순회하기 위해서 if 문을 넣는 것보다 for문에서 정리하면 깔끔하다
 
정답 문제 풀이
JavaScript
/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if (x < 0) return false;
    const s = x.toString(); // 변수명을 s (string)로 변경하여 가독성 향상
    const len = s.length;

    // 반복문은 문자열 길이의 절반만 돌면 됩니다.
    for (let i = 0; i < len / 2; i++) {
        // s[i] : 앞에서부터 i번째 글자
        // s[len - 1 - i] : 뒤에서부터 i번째 글자
        if (s[i] !== s[len - 1 - i]) {
            return false; // 하나라도 다르면 즉시 false 반환
        }
    }

    return true; // 반복문이 문제 없이 끝나면 true
};