728x90
https://www.acmicpc.net/problem/1074
풀이 방법
수정중..
틀렸던 부분 & 주의할 부분
수정중..
JAVA 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1074_Z {
static StringTokenizer st;
static int N,r,c;
static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
cnt=0;
cal(0,0,(int)Math.pow(2, N));
System.out.println(cnt);
}
private static void cal(int x,int y,int n) {
if (n==1) {
return;
}
int len=n/2;
// 4사분면으로 나눠서, 해당 범위에 r과 c가 존재하면 넓이만큼 cnt++
if(x<=r && r<x+len && y<=c &&c<y+len) {
cal(x,y,len);
}else if(x<=r && r<x+len && y+len<=c && c<y+len*2) {
cnt+=len*len;
cal(x,y+len,len);
}else if(x+len<=r && r<x+len*2 && y<=c && c<y+len) {
cnt+=len*len*2;
cal(x+len,y,len);
}else if(x+len<=r && r<x+len*2 && y+len<=c && c<y+len*2) {
cnt+=len*len*3;
cal(x+len,y+len,len);
}
}
}
처음엔 한칸씩 탐색하다가, 시간초과가 나서 코드를 수정했다. 아직 분할정복은 많이 어렵다..
728x90
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[JAVA] 백준 10026 적록색약 (0) | 2021.08.23 |
---|---|
[JAVA] 백준 1260 DFS와 BFS (0) | 2021.08.23 |
[JAVA] 백준 1987 알파벳 풀이 (0) | 2021.08.20 |
[JAVA] 백준 1192 쿼드트리 풀이 (0) | 2021.08.20 |
[JAVA] 백준 17135 캐슬 디펜스 풀이 (0) | 2021.08.20 |