더북(TheBook)

011 문자열 회문 검사

 

간단히 짚고 넘어가자면 회문(palindrome)이란 거꾸로 뒤집어도 똑같은 문자열 또는 수다. 즉, 회문은 양방향으로 처리할(읽을) 수 있고 그 결과가 같다(예를 들어 madam은 회문이고 madame은 회문이 아니다).

간단히 구현하려면 중간에서 만나는 방식(meet-in-the-middle)으로 주어진 문자열들의 글자를 비교하면 된다. 기본적으로 이 해법은 문자열 중간에 도달할 때까지 첫 번째 문자와 마지막 문자, 두 번째 문자와 끝에서 두 번째 문자 등을 비교한다. 구현에는 while 문을 사용한다.

public static boolean isPalindrome(String str) {
  int left = 0;
  int right = str.length() - 1;

  while (right > left) {
    if (str.charAt(left) != str.charAt(right)) {
      return false;
    }
    left++;
    right--; 
  }
  return true;
}

위 해법을 더욱 간결하게 작성하려면 다음과 같이 while 문 대신 for 문을 사용한다.

public static boolean isPalindrome(String str) {
  int n = str.length();

  for (int i = 0; i < n / 2; i++) {
    if (str.charAt(i) != str.charAt(n - i - 1)) {
      return false;
    }
  }
  return true;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.