유블로그

[Java] BOJ 17609 회문 본문

알고리즘

[Java] BOJ 17609 회문

yujeong kang 2021. 5. 5. 15:34

[Java] BOJ 17609 회문

 

www.acmicpc.net/problem/17609

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

 

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

public class BOJ_17609_회문 {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int T = Integer.parseInt(br.readLine());
		for (int i = 0; i < T; i++) {
			String s = br.readLine();
			MIN = 2;
			checkPal(false, s, 0, s.length()-1);
			System.out.println(MIN);
		}
	} // main

	static int MIN;
	static void checkPal(boolean isUse, String s, int start, int idx) {
		for (int i = start; i < s.length(); i++) {
			if (i >= idx) {
				break;
			}
			if (s.charAt(i) != s.charAt(idx)) {
				if (isUse) return;
				if (s.charAt(i) == s.charAt(idx - 1)) {
					checkPal(true, s, i+1, idx-2);
				}
				if (MIN == 2 && s.charAt(i + 1) == s.charAt(idx)) {
					checkPal(true, s, i+2, idx-1);
				}
				return;
			}
			idx--;
		}
		if (isUse) MIN = 1;
		else MIN = 0;
		return;
	}
}

 

... 어렵지 않은데 이런 저런 이유로.. 시간이 오래 걸렸다.

슬프다

 

양쪽에서 인덱스를 좁혀오면서 같은 지 확인하는데,

만약 같지 않고 아직 삭제한 적도 없다면 checkPal() 함수를 재귀 타고 들어가서 끝까지 도달하는 지 확인한다.

 

이미 유사회문 판정이 났다면 MIN == 2 이걸로 더이상 유사회문 판정을 하지 않는다.

 

회문 판정 끝까지 도달 했을 때 삭제한 적이 있으면 MIN = 1

없으면 0

으로 출력한다.

 

'알고리즘' 카테고리의 다른 글

BOJ 1520 내리막길 Java  (0) 2021.06.10
BOJ 1022 소용돌이예쁘게출력하기 Java  (0) 2021.06.06
[Java] BOJ 9935 문자열 폭발  (0) 2021.05.04
[Java] BOJ 4949 균형 잡힌 세상 백준  (0) 2021.05.03
[Java] BOJ 5430 AC 백준  (0) 2021.05.02