Notice
Recent Posts
Recent Comments
Link
티끌모아 태산
백준 1074번: Z 본문
이 문제는 재귀적으로 호출하며 구역을 4등분 한다는 점에서 2630번: 색종이 만들기 문제와 비슷하다
위 문제를 풀었다면 재귀적 호출과 사분면에 따른 count 수만 잘 계산해주면 어렵지 않게 풀 수 있다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken()); // 행
int c = Integer.parseInt(st.nextToken()); // 열
int size = (int) Math.pow(2, N); // 한 변의 사이즈
find(size, r, c);
bw.write(String.valueOf(count));
bw.flush();
bw.close();
}
private 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) {
count += size * size / 4; // 1사분면 방문한 횟수 더하기
find(size / 2, r, c - size / 2);
} else if (r >= size / 2 && c < size / 2) {
count += (size * size / 4) * 2; // 2사분면 방문한 횟수 더하기
find(size / 2, r - size / 2, c);
} else {
count += (size * size / 4) * 3; // 3사분면 방문한 횟수 더하기
find(size / 2, r - size / 2, c - size / 2);
}
}
}
'코딩 > 코딩테스트' 카테고리의 다른 글
백준 1931번: 회의실 배정 (0) | 2024.06.18 |
---|---|
백준 1389번: 케빈 베이컨의 6단계 법칙 (0) | 2024.06.11 |
백준 21736번: 헌내기는 친구가 필요해 (1) | 2024.06.04 |
백준 18870번: 좌표 압축 (0) | 2024.06.04 |
백준 11726번: 2xn 타일링 (0) | 2024.04.29 |