접근 방법
처음에 그냥 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 |
댓글