회문(Palindrome)은 거꾸로 읽어도 원래와 동일한 값이 되는 수 또는 문자열을 의미합니다. 대표적인 예로 121, 313, 525 같은 숫자나 "aba", "wow" 같은 문자열이 있습니다.
이 글에서는 Java를 사용해 숫자가 회문인지, 그리고 문자열이 회문인지 확인하는 두 가지 방법을 소개합니다.
1. 숫자 회문 확인하기
숫자의 회문 여부는 다음과 같은 과정으로 확인할 수 있습니다.
- 숫자를 10으로 나눈 나머지(% 연산자)를 이용해 마지막 자릿수부터 하나씩 추출합니다.
- 추출한 자릿수를 역순으로 조합해 새로운 값을 만듭니다.
- 원래 값과 뒤집은 값을 비교하여 같으면 회문입니다.
예제 코드
public class Palindrome {
public static void main(String[] args) {
int a = 525, revVal = 0, remainder, val;
val = a;
System.out.println("Number to be checked = "+a);
while( a != 0 ) {
remainder = a % 10;
revVal = revVal * 10 + remainder;
a /= 10;
}
if (val == revVal)
System.out.println("Palindrome!");
else
System.out.println("Not a palindrome!");
}
}실행 결과
Number to be checked = 525 Palindrome!
위 코드에서는 525를 뒤집어도 525가 되므로 "Palindrome!"이 출력됩니다. 반면 123처럼 뒤집었을 때 321이 되어 원래 값과 달라지는 숫자는 "Not a palindrome!"이 출력됩니다.
2. 문자열 회문 확인하기
문자열의 경우 StringBuffer 클래스가 제공하는 reverse() 메서드를 활용하면 간단하게 처리할 수 있습니다. 문자열을 뒤집은 후 equals() 메서드로 원본과 비교하면 됩니다.
예제 코드
public class Demo {
public static void main (String[] args) {
String str = "ABA";
String strRev = new StringBuffer(str).reverse().toString();
if (str.equals(strRev))
System.out.println("Palindrome!");
else
System.out.println("Not a Palindrome!");
}
}실행 결과
Palindrome!
"ABA"는 앞뒤 어느 방향으로 읽어도 같으므로 회문으로 판별됩니다.
정리
숫자 회문은 나머지 연산과 몫 연산을 반복하며 자릿수를 역순으로 재조합하는 방식으로 확인하고, 문자열 회문은 StringBuffer.reverse()를 이용해 손쉽게 판별할 수 있습니다. 상황에 맞는 방법을 선택해 활용해 보시기 바랍니다.