정수판별(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는 정수라고 가정할 수 있습니다. |
'개발' 카테고리의 다른 글
숫자와 연산자를 조합하여 타겟 만들기 (Backtracking) | 알고리즘 & 영어 공부 (0) | 2025.02.18 |
---|---|
사전순으로 가장 큰 유효한 수열 구성 문제 풀이 | 알고리즘 & 영어 공부 (0) | 2025.02.16 |
🚀 두 수의 합(Two Sum) 알고리즘 문제 풀이 | 알고리즘 & 영어 공부 (1) | 2025.02.14 |