개발

🚀 정수 판별(Palindrome Number) 알고리즘 문제 풀이 | 알고리즘 & 영어 공부

감먹으러곶감 2025. 2. 15. 15:36

정수판별(Palindrome Number) 문제를 해결하는 방법을 정리했습니다.

앞으로 올릴 게시물을 통해 알고리즘 사고력 영어 문제 해석 능력을 동시에 키워보려고 합니다.

 

많은 관심 부탁드립니다.


1️⃣ 문제 설명 (Problem Statement)

📌 영어 지문 (Original Problem Statement)

Given an integer x, return true if x is a palindrome, and false otherwise.

📌 한글 번역 (Korean Translation)

정수 x가 회문 수(Palindrome Number) 라면 true를 반환하고, 그렇지 않으면 false를 반환하세요.

💡 회문 수란?

  • 왼쪽에서 오른쪽으로 읽은 값과, 오른쪽에서 왼쪽으로 읽은 값이 같은 수를 의미합니다.
  • 예) 121 → 앞뒤가 같음 → ✅ true / -121 → 121-로 바뀌므로 → ❌ false

2️⃣ 예제 (Example)

Example 입력 (x) 출력 (output) 설명
1 121 true 121은 앞뒤가 같기 때문에 true
2 -121 false -121은 거꾸로 읽으면 121-가 되므로 false
3 10 false 10은 거꾸로 읽으면 01이므로 false

🚀 여러 가지 문제 해결 전략 (How to Solve This Problem Efficiently?)

이 문제를 해결하는 방법은 크게 두 가지가 있습니다.

1️⃣ 문자열 변환(String Conversion)을 이용하는 방법

2️⃣ 반전 숫자(Reversing Half of the Number)를 이용하는 방법

 

💡 어떤 방식을 사용해야 될까?

  • 문자열 변환 방식은 간단하지만 O(n)의 시간 복잡도를 가집니다.
  • 반전 숫자 방식은 O(log n)의 시간 복잡도로 더 효율적입니다.
  • 따라서 반전 숫자 방식이 더 최적의 방법입니다.

✨ 풀이 방법 1: 문자열 변환 방식 (비효율적인 방식)

📌 코드 구현 (TypeScript)

/**
 * @param x - 검사할 숫자
 * @returns 주어진 숫자가 팰린드롬이면 true, 아니면 false 반환
 */
function isPalindrome(x: number): boolean {
    
    // 숫자를 문자열로 변환한 후, 뒤집어서 원본과 비교
    return x.toString() === x.toString().split('').reverse().join('');
}

📌 단점

  • 시간 복잡도: O(n) (문자열 변환 + 뒤집기 연산)
  • 추가 메모리 사용 (문자열 변환 과정에서 메모리 소모)

✨ 풀이 방법 2: 숫자 반전 방식 (효율적인 방식)

📌 코드 구현 (TypeScript)

/**
 * @param x - 검사할 숫자
 * @returns 주어진 숫자가 팰린드롬이면 true, 아니면 false 반환
 */
function isPalindrome(x: number): boolean {
    
    // 음수이거나 0으로 끝나는 숫자는 (0 자체 제외) 절대 회문이 될 수 없음
    if (x < 0 || (x % 10 === 0 && x !== 0)) {
        return false;
    }
    
    let reversedHalf = 0;
    
    // 원래 숫자의 절반을 반전시켜 비교하기 위해 반복
    while (x > reversedHalf) {
        
        // 현재 숫자의 마지막 자리를 reversedHalf에 추가
        reversedHalf = reversedHalf * 10 + x % 10;
        
        // x에서 마지막 자리를 제거
        x = Math.floor(x / 10);
    }
    
    // 숫자의 길이가 짝수일 경우: 완전히 반전된 숫자와 비교
    // 숫자의 길이가 홀수일 경우: 가운데 숫자를 제외한 나머지 비교
    return x === reversedHalf || x === Math.floor(reversedHalf / 10);
}

📌 장점

  • 시간 복잡도: O(log n) (숫자를 절반만 뒤집으면 되므로 더 빠름)
  • 추가 메모리 사용 X (문자열 변환 없이 정수 연산만 수행)

4️⃣🚀 영어 표현 정리

이 문제를 풀면서 배울 수 있는 알고리즘 관련 영어 표현을 정리해 보았습니다.

영어 표현
return true if x is a palindrome x가 회문이면 true를 반환하세요.
otherwise, return false 그렇지 않으면 false를 반환하세요.
reads the same backward as forward 앞에서 읽든 뒤에서 읽든 같은 값입니다.
you may assume that x is an integer x는 정수라고 가정할 수 있습니다.