본문 바로가기
알고리즘/Class 3

백준 BOJ 1074번

by edvedv 2022. 8. 11.


접근 방법

 

처음에 그냥 4등분으로 분할해서 재귀로 풀면 되겠다하고 모든 칸을 방문하면서 카운트했지만 당연히 시간초과.

 

문제를 잘 안보고 그냥 풀어서 몇 시간이나 날려버렸다. 

 

다시 생각해보니 어차피 사이즈를 알기 때문에 한 칸씩 탐색할 필요가 없었고,

4등분 했을 때 칸 수가 무조건 정해져 있으니, 해당 사이즈만큼 더해주면 된다.

 


코드

import java.util.*;

public class Main {
   static int result = 0;
   public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int N = in.nextInt();
      int r = in.nextInt();
      int c = in.nextInt();
      int size = (int)Math.pow(2, N);     
      find(size, r, c);
      System.out.println(result);
      in.close();
   }
   public static void find(int size, int r, int c){
      if(size == 1){
         return;
      }
      if(r < size/2 && c < size/2){ 
         find(size/2, r, c);
      }
      else if(r < size/2 && c >= size/2){
         result += (size * size) / 4;
         find(size/2, r, c- size/2);
      }
      else if(r >= size/2 && c < size/2){ 
         result += ((size * size) / 4) * 2;
         find(size/2, r - size/2, c);
      }
      else{ 
         result += ((size * size) / 4) * 3;
         find(size/2, r - size/2, c - size/2);
      }
   }
}

'알고리즘 > Class 3' 카테고리의 다른 글

백준 BOJ 1389번  (0) 2022.08.16
백준 BOJ 1260번  (0) 2022.08.15
백준 BOJ 1107번  (0) 2022.08.15
백준 BOJ 1012번  (0) 2022.08.09
백준 BOJ 1003번  (0) 2022.08.01

댓글