백준 17609번

문딤·2022년 8월 15일
0

회문

https://www.acmicpc.net/problem/17609

풀이생각

  • 이중 for문으로 처음자리랑 끝자리 비교
  • 하지만 문자열 길이범위가 100000까지 이므로 시간초과나겟지

소스코드

Main


  static int t;
    static String s;
    static char[] arr;
    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 s = br.readLine();
            arr=s.toCharArray();
            int left=0;
            int right=s.length()-1;

            if(check(left,right)) {
                sb.append(0).append('\n');
                continue;
            }
            if(checkS(left,right)) {
                sb.append(1).append('\n');
            }else {
                sb.append(2).append('\n');
            }

        }
        System.out.println(sb.toString());

        }

check 1

 private static boolean check(int left,int right) {
        while(left<=right) {
            if(arr[left]!=arr[right]) {//다름
                return false;
            }
            left+=1;
            right-=1;
        }
        return true;
    }

// 회문이 맞는지

check2

private static boolean checkS(int left,int right){
        while (left <= right) {
            if (arr[left] != arr[right]) {//다름
                boolean a = check(left + 1, right);
                boolean b = check(left, right - 1);
                if (a == false && b == false) {
                    return false;
                } else return true;
            }
            left += 1;
            right -= 1;
        }
        return true;
    }

//아예 회문이 아닌애랑 그래도 비슷한애 구분

공부할 것

투 포인터 단 방향, 방향 다른거(배열 1개, 2개 짜리 예제 만들기)

참고

https://yubh1017.tistory.com/78

profile
풀스택개발자가 될래요

0개의 댓글