문제 제목 : 팰린드롬인지 확인하기


문제

알파벳 소문자로만 이루어진 단어가 주어진다.

이 때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬 (Palindrome) 이란, 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

level, noon 은 팰린드롬이고,

baekjoon, online, judge 는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다.

단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄 에 팰린드롬이면 1, 아니면 0을 출력한다.


예제 입력 1

level

예제 출력 1

1

예제 입력 2

baekjoon

예제 출력 2

0


왼쪽부터 읽었을 때, 오른쪽 부터 읽었을 때, 동일하다는 것을 어떻게 표현할 수 있을까?

직관적으로 해석 했을 때, 두 가지의 해석이 나온다.

  1. 해당 문자열 원본, 거꾸로 두 개의 배열이 존재할 때, 두 개의 배열은 동일하다.
  2. 문자열 시작 인덱스, 마지막 인덱스, 두 개를 선정했을 때,
    • 시작 인덱스는 커지며, 마지막 인덱스는 작아진다.
    • 각각의 인덱스의 데이터는 항상 동일하다.

이렇게 해석 할 수 있다.


물론 1, 2 번 둘 다 프로그램으로 구현이 쉽게 가능하다.

하지만, 1번의 경우 비교 문자열 배열을 하나 더 만들어야 한다는 점에서 효율적이지 않다.

따라서, 2번 의 방식으로 팰린드롬 인지 체크하게 된다.


만약에, 문자열 str 을 받았다고 가정한다.

그렇다면, 시작 인덱스와 마지막 인덱스의 정의는 어떻게 하는가?

바로, 0str.length() - 1 이다.

시작 인덱스인 0 은 점점 커지며,

마지막 인덱스인 str.length() - 1 은 점점 작아진다.

중앙에서 만나거나, 엇갈릴 때 까지 이러한 반복을 실시한다.

서로의 인덱스가 지나쳐 봤자 결과는 동일한 것이 팰린드롬이기 때문이다. - 양쪽 동일 특성


이를 for 문법으로 만드는 방식이 있으며, while 문법으로 만드는 방식이 존재한다.


Answer 1 - for 문법 사용


import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

       String str = br.readLine();

       boolean isPalindrome = true;

       for(int i = 0, j = str.length() - 1; i <= j; i++, j--) {
          char ch1 = str.charAt(i);
          char ch2 = str.charAt(j);

          if(ch1 != ch2) {
              isPalindrome = false;
              break;
          }
       }

       if(isPalindrome)
          System.out.println(1);
       else 
          System.out.println(0);
    }
}

Answer 2 - while 문법 사용


import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

       String str = br.readLine();

       int i = 0;
       int j = str.length() - 1;

       boolean isPalindrome = true;

       while(i <= j) {
          char ch1 = str.charAt(i);
          char ch2 = str.charAt(j);

          if(ch1 != ch2) {
             isPalindrome = false;
             break;
          }
          i++; j--;
       }

       if(isPalindrome)
          System.out.println(1);
       else 
          System.out.println(0);
    }
}