본문 바로가기
알고리즘

[백준] 회문 - java

by minkang 2021. 5. 5.

www.acmicpc.net/problem/17609

 

17609번: 회문

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

www.acmicpc.net

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

public class 회문 {
	static int answer;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for(int i=0; i<T; i++) {
			StringBuilder sb = new StringBuilder(br.readLine());
			answer = 2;
			solve(0, sb.length()-1, sb, 0);
			System.out.println(answer);
		}
	}
	private static void solve(int left, int right, StringBuilder sb, int flag) {
		while(true) {
			if(left >= right) {
				break;
			}
			
			if(sb.charAt(left) == sb.charAt(right)) {
				left++;
				right--;
			}
			else {
				if(flag == 0) {
					solve(left+1, right, sb, 1);
					solve(left, right-1, sb, 1);
				}
				return;
			}
		}
		
		if(flag == 1) {
			answer =1;
		}
		else {
			answer =0;
		}
	}
}

소요시간 : 30분

한 문자를 삭제해야할 때 왼쪽 값을 삭제한 방법과 오른쪽 값을 삭제한 방법 둘다 시도해야합니다.

comwttwtmoc 와 같은 경우에

wttwt를 비교할 때 왼쪽 w를 삭제한다면 ttwt가 되서 유사회문이 되지 않고,

오른쪽 t를 삭제한다면 wttw로 유사회문이 되게 됩니다.

이 로직을 이용해서 간단하게 풀어보았습니다.

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

[백준] 1068 트리 - java  (0) 2021.06.18
[프로그래머스] [3차]압축 - java  (0) 2021.05.07
[백준] 문자열 폭발 - java  (0) 2021.05.04
[카카오 인턴] 키패드 누르기 - java  (0) 2021.04.30
[백준] 센서 - java  (0) 2021.04.28