자바 팰린드롬 수 판별기: while/for 루프 알고리즘
팰린드롬 수란?
팰린드롬 수는 앞으로 읽으나 뒤로 읽으나 같은 수입니다. 예: 121, 393, 48084. 수직축 대칭성을 가지며 알고리즘 퍼즐에 자주 등장합니다.
자바에서 팰린드롬 검사는 면접 질문과 코딩 챌린지에서 흔합니다. 알고리즘은 직관적이지만 여러 방식으로 구현 가능합니다.
알고리즘 개요
- 입력 정수를 읽습니다.
- 자릿수를 역순으로 뒤집어 저장합니다.
- 뒤집은 숫자와 원본을 비교합니다.
- 일치하면 팰린드롬, 아니면 아닙니다.
while 루프로 판별하기
while 루프로 숫자를 뒤집고 팰린드롬 여부를 판단하는 간결한 자바 프로그램입니다. 과정 이해를 위해 중간 단계도 출력합니다.
package com.guru99;
public class PalindromeNum {
public static void main(String[] args) {
int inputNumber = 171; // 검사할 숫자
int reversed = 0;
int temp = inputNumber;
while (temp > 0) {
int lastDigit = temp % 10;
reversed = (reversed * 10) + lastDigit;
temp /= 10;
}
System.out.println("뒤집힌 숫자: " + reversed);
if (reversed == inputNumber) {
System.out.println("팰린드롬 수입니다.");
} else {
System.out.println("팰린드롬 수가 아닙니다.");
}
}
}
출력
뒤집힌 숫자: 171
팰린드롬 수입니다.
for 루프로 판별하기
동일한 로직을 for 루프로 표현할 수 있으며, 루프 카운터를 감소하는 인덱스로 자연스럽게 표현하고 싶을 때 유용합니다.
package com.guru99;
public class PalindromeNum {
public static void main(String[] args) {
int inputNumber = 185; // 검사할 숫자
int reversed = 0;
int temp = inputNumber;
for (; temp > 0; temp /= 10) {
int lastDigit = temp % 10;
reversed = (reversed * 10) + lastDigit;
}
System.out.println("뒤집힌 숫자: " + reversed);
if (reversed == inputNumber) {
System.out.println("팰린드롬 수입니다.");
} else {
System.out.println("팰린드롬 수가 아닙니다.");
}
}
}
출력
뒤집힌 숫자: 581
팰린드롬 수가 아닙니다.
고려사항 및 모범 사례
- 음수: 정의상 마이너스 기호 때문에 음수는 팰린드롬이 아닙니다. 입력이 음수면 즉시
false 반환.
- 오버플로: 32비트 정수 뒤집기 시 오버플로 가능. 프로덕션 코드에서는
long 사용하거나 곱셈 전 오버플로 체크.
- 문자열 접근법: 숫자를 문자열로 변환해 뒤집은 것과 비교하는 방식이 더 간단하고 오류가 적음. 특히 큰 숫자에 유리.
더 자세한 설명은 GeeksforGeeks와 Stack Overflow의 숫자 뒤집기 토론을 참조하세요.