백준

백준 1802번: 종이접기

대기업 가고 싶은 공돌이 2023. 11. 18. 17:48

문제를 이해하는데 시간이 좀 걸린다.

종이를 이리저리 접어보며 규칙을 찾는데 성공

 

맨 처음 중앙의 접힌 면을 기점으로 1번으로 접으면 1 (1) 0이 만들어지고,

2번으로 접으면 0 (1) 1 이 만들어진다.

 

여기에서 한 번 더 접으면 기존의 접힌 면을 기점으로 앞 뒤에 10 또는 01이 생긴다.

 

재귀함수를 사용하여 앞 뒤 숫자가 다르면 No를 출력해주었다.

import java.util.Scanner;
import java.util.Arrays;


public class Main {

    public static int devide(char[] x, int left, int right){

        int mid = (left+right) / 2 ;

        if(right - left > 3) {
            int check = devide(x, left, mid-1);
            if (check == 0) {
                return 0;
            }
            check = devide(x, mid + 1, right);
            if (check == 0) {
                return 0;
            }
        }

        for(int i=left, k=right;i<mid;i++,k--){
            if(x[i] == x[k]){
                return 0;
            }
        }

        return 1;

    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();
        sc.nextLine();
        String x;

        for(int i = 0;i<T;i++){
            x = sc.nextLine();

            int len = x.length();
            char[] split = new char[len];

            split = x.toCharArray();
            int check = devide(split,0,len-1);

            if(check == 1){
                System.out.println("YES");
            }
            else{
                System.out.println("NO");
            }


        }
    }
}

'백준' 카테고리의 다른 글

백준 14620번 꽃길 (java)  (1) 2024.03.24
백준 19637번 IF문 좀 대신 써줘  (0) 2024.03.14
백준 2503번 숫자야구  (0) 2024.03.09
백준 3085번 사탕게임  (3) 2024.03.07
백준 10816번 숫자 카드2  (0) 2024.02.10