본문 바로가기
PS/BOJ

백준 15927 자바 - 회문은 회문아니야!! (boj 15927 java)

by Nahwasa 2022. 4. 4.

문제 : boj15927

 

 

  혹시 고민을 많이 했다면, 풀이를 볼 시 상당히 짜증날 수 있다. 스포성이 다분한 풀이 이므로 최대한 직접 풀어보는걸 추천한다.

 

 

 

 

 

 

 

 

------

 

 

 

 

 

 

 

  입력으로 들어온 문자열은 이하의 3가지 경우가 존재한다.

 

A. 애초에 팰린드롬이 아님 (e.g. 'abcd')

B. 팰린드롬이긴한데, 모든 문자열이 동일함 (e.g. 'aaa')

C. 모든 문자열이 동일한게 아닌 팰린드롬 (e.g. 'aabaa')

 

  각각 어떻게 처리할지 살펴보면 된다.

A -> 처음부터 팰린드롬이 아니므로 가장 긴 팰린드롬이 아닌 부분문자열은 자기 자신이다. 따라서 입력 문자열의 길이를 출력하면 된다.

B -> 이 경우 부분문자열 중 팰린드롬이 아닌게 존재할 수 없다. 따라서 -1을 출력하면 된다. 참고로 'a' 와 같이 문자가 1개일 경우도 여기에 포함되므로, 0이 아니라 -1이 출력되어야 한다.

C -> 아마 'A'와 'B'는 쉽게 해결방법을 찾았을텐데 'C'가 문제였을 것이다. 실은 팰린드롬 문자열의 경우 맨 앞이나 맨 뒤 아무거나 하나 제거하면 팰린드롬이 아니게 된다!(다양한 경우를 만들어서 해보자) 따라서 단순하게 '입력 문자열 길이-1' 을 출력해주면 된다. 이것 때문에 풀이를 보면 짜증날 거라고 한 것이다.

 

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        char c = s.charAt(0);
        int i = 1;
        for (; i < s.length(); i++) {
            if (c!=s.charAt(i)) break;
        }
        if (i==s.length()) {
            System.out.println(-1);
            return;
        }
        i = 0;
        for (; i < s.length()/2; i++) {
            if (s.charAt(i)!=s.charAt(s.length()-1-i)) break;
        }
        System.out.println(i==s.length()/2?s.length()-1:s.length());
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글