백준 17609 회문 (Java,자바)

jonghyukLee·2022년 11월 29일

이번에 풀어본 문제는
백준 17609번 회문 입니다.

📕 문제 링크

❗️코드

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

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

        StringBuilder answer = new StringBuilder();
        while (T-- > 0) {
            String input = br.readLine();
            StringBuilder sb = new StringBuilder(input);
            String result = "2";

            // 회문
            if (input.equals(sb.reverse().toString())) {
                result = "0";
            }

            // 유사회문
            else {
                int left = 0;
                int right = input.length() - 1;
                while (left < right) {
                    if (input.charAt(left) != input.charAt(right)) {
                        // 왼쪽, 오른쪽 각각 지워봄
                        StringBuilder delLeft = new StringBuilder(input).deleteCharAt(left);
                        StringBuilder delRight = new StringBuilder(input).deleteCharAt(right);

                        // 둘중 하나라도 성사되면 유사회문
                        if (delLeft.toString().equals(delLeft.reverse().toString()) || delRight.toString().equals(delRight.reverse().toString())) {
                            result = "1";
                        }
                        break;
                    }
                    left++;
                    right--;
                }
            }
            answer.append(result).append("\n");
        }
        answer.deleteCharAt(answer.length() - 1);
        System.out.print(answer);
   }
}

📝 풀이

주어진 조건에 맞는 문자열에 대해 회문은 "0", 유사회문은 "1", 나머지는 "2"를 출력하는 문제입니다.
StringBuilder의 reverse 함수를 사용하여 뒤집었을 때, 두 문자열이 일치한다면 회문으로 판단할 수 있습니다.
유사회문의 경우, 양 끝부터 문자를 하나하나 비교하여 서로 달라지는 시점에서 둘 중 하나를 제거해서 일치시킬 수 있다면, 유사 회문입니다.
이외에는 "2"를 출력해주면, 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글