곽로그

[백준10988, JAVA ]팰린드롬인지 확인하기 본문

알고리즘/백준

[백준10988, JAVA ]팰린드롬인지 확인하기

일도이동 2023. 5. 7. 22:27
반응형

문제

https://www.acmicpc.net/problem/10988

 

10988번: 팰린드롬인지 확인하기

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

www.acmicpc.net

 

풀이

앞으로 읽을 때와 거꾸로 읽을 때가 같다는 말은, 단어를 반으로 접었을 때 대칭이라는 것에서 힌트를 얻었다. 

  예제인 LEVEL로 예를 들어보자. 가운데 V를 기준으로 양끝에 있는 알파벳이 차례로 같다. 다시말해 0번째 알파벳과 4번째 알파펫, 1번째 알파벳과 3번째 알파벳이 같다. 여기서 대략적인 식을 세울 수 있다. 처음부터 단어의 중간 전까지 비교를 반복한다(중간에 있는 단어는 비교할 대상이 없기때문에 제외된다). 비교를 어떻게 하는가를 보자. 첫번째(0) 는 마지막 (4) 알파벳과, 두번째(1)는 끝에서 두번째 앞파벳(3) 과 비교를 한다. 여기서 인덱스로 치환해서 생각하면 i 번째 알파벳과 n(단어의 길이) - 1-i번째 알파벳과 비교를 하는데, 두 알파벳이 같지 않으면 팰린드롬이 아니다 

 

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String input = br.readLine();
        int n = input.length();
        int result = 1;
        //1. 짝수개의 인풋 : level 0,1,2,3,4 5/2  = 2 (0-4, 1-3)
        //2. 홀수개의 인풋 : baekjoon 0,1,2,3,4,5,6,7 8/2 = 4 (0-7, 1-6, 2-5,3-4)

        for(int i =0; i <n ; i++){
            if(input.charAt(i) != input.charAt(n-i-1)){
                result = 0;
                break;
            }
        }

        bw.write(String.valueOf(result));
        bw.flush();

        br.close();
        bw.close();
    }
}
반응형
Comments