새소식

항해 99 TIL

99클럽 코테 스터디 33일차 TIL [투포인터]

  • -
 

[문제 이름 : 회문 (백준 17609, G5)]
문제 url : https://www.acmicpc.net/problem/17609

내가 작성한 코드는 아래와 같다.

import java.io.*;

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

        while (T-- > 0) {
            String input = br.readLine();
            sb.append(palindrome(input)).append("\n");
        }
        sb.deleteCharAt(sb.length()-1);
        System.out.print(sb);
    }

    static int palindrome(String input) {
        int left = 0;
        int right = input.length() - 1;

        // 1. 회문 확인
        while (left < right) {
            if (input.charAt(left) == input.charAt(right)) {
                left++;
                right--;
            } else {
                // 2. 유사회문 확인
                if (isPalindrome(input, left + 1, right) || isPalindrome(input, left, right - 1)) {
                    return 1;
                } else {
                    return 2;
                }
            }
        }
        return 0;
    }
    
    static boolean isPalindrome(String input, int left, int right) {
        while (left < right) {
            if (input.charAt(left) != input.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

문제 전에 의도치 않게 힌트를 봐버려서 문제를 빠르게 풀이할 수 있었다.

1. 투포인터를 활용하여 회문인지 확인한다. 회문이라면 0을 리턴한다.

2. 회문이 아닌 경우, 유사회문인지, 일반 문자열인지 확인해야 한다. 이를 위해 isPalindrome() 메서드를 작성하였다.

3. 한 문자를 삭제하는 과정에서, substring()을 사용하다 보니 오류가 발생할 가능성이 있어, 다르게 방법을 생각해보았다. 회문 검색 방식은 그대로 진행하되, 앞 뒤 글자를 다시 확인하는 과정으로 풀이 방안을 떠올렸다.


내일은 은행 인턴 자기소개서를 작성할 예정이다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.