백준

백준 1074 - Java

으엉어엉 2024. 10. 21. 11:35
728x90

 

import java.util.Scanner;

//0행, 0열 시작임.
//0.5 time limit . 2중 for문 X
public class BJ1074 {
    static int count =0;
    public static void main(String[] args)  {
        Scanner sc = new Scanner(System.in);
        int N=sc.nextInt();// N입력받기
        int r = sc.nextInt(); //r 입력
        int c = sc.nextInt(); //c 입력

        int size = (int) Math.pow(2,N);
        findMin(size,r,c);
        System.out.println(count);
    }
    private static void findMin (int size, int r, int c){
        // 0,0 ~ 1,1, 0,0 ~ 3,3 2^n * 2^n
        //00 01 10 11   // n=1
        //00 01 10 11 03 13 04 14 20 21 30 31 22 23 32 33 //n=2
        if(size ==1){
            return;
        }

        if(r< size/2 && c<size/2){
            findMin(size/2,r,c);
        }else if(r<size/2 && c>=size/2){
            count += size * size /4;
            findMin(size/2,r,c-size/2);
        }else if(r>=size/2 && c<size/2){
            count += (size * size /4)*2;
            findMin(size/2,r-size/2,c);
        }else{
            count += (size * size /4)*3;
            findMin(size/2,r-size/2,c-size/2);
        }
    }
}

 

Time limit 때문에 2중 for문은 아닐 것이고 재귀적으로 divide + conquer 방식을 사용해야한다는 것을 알았다. 

재귀적으로 호출해서 나아간다.

728x90

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

백준 1927 - Java  (0) 2024.10.23
백준 1541 - Java  (0) 2024.10.22
백준 1260 - Java  (2) 2024.10.20
백준 17626 - Java  (0) 2024.10.19
백준 9461 - Java  (1) 2024.10.19