Algorithm/백준 알고리즘

백준_17609 회문(자바) / 문자열

미스터로즈 2021. 7. 25. 14:15

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

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

public class Back_17609 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(br.readLine());

		for (int i = 0; i < N; i++) {
			String tmp = br.readLine();
			
			if(palindrome(tmp)) {
				sb.append("0\n");
			}else if(palindrome2(tmp)) {
				sb.append("1\n");
			}else {
				sb.append("2\n");
			}
		}
		System.out.println(sb);
	}
	
	private static boolean palindrome(String tmp) {
		int left = 0;
		int right= tmp.length()-1;
		while(left<=right) {
			if(tmp.charAt(left++)!=tmp.charAt(right--)) {
				return false;
			}
		}
		return true;
	}

	private static boolean palindrome2(String tmp) {
		int left=0;
		int right= tmp.length()-1;
		while(left<=right) {
			if(tmp.charAt(left)!=tmp.charAt(right)) {
				return palindrome(tmp.substring(left+1, right+1)) | 
                palindrome(tmp.substring(left,right));
			}
			left++;
			right--;
		}
		return true;
	}
}

- 이 문제는 문자열을 이용하는 문제입니다.

- 약간의 재귀를 포함시켜 코드를 짯습니다.

- 처음에는 문자열의 길이를 이용해 홀수 인지 짝수인지를 판단해서 해결을 하려고 했는데, 길이의 고정된 크기로 인해서 1개 지워도 되는 경우를 해결하기 어려웠습니다.