Notice
Recent Posts
Link
- Today
- Total
hye-log
[백준]1074번 Z(JAVA) 본문
0. 문제 링크
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
1. 문제 설명
1) 2^N * 2^N 크기의 배열을 방문할 때 r행 c열을 몇 번째로 방문하는지 구하기
2. 입출력
// input
2 3 1 // N, r, c
// output
11
3. 코드
import java.util.Scanner;
public class b1074 {
static int cnt = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int r = sc.nextInt();
int c = sc.nextInt();
recursive(r, c, (int)Math.pow(2, N));
System.out.println(cnt);
}
private static void recursive(int r, int c, int size) {
// basis part
if(size == 1) { // size가 1이 되면 종료
return;
}
// inductive part
int half = size / 2;
if(r < half && c < half) { // 1사분면
recursive(r, c, half);
} else if(r < half && c >= half) { // 2사분면
cnt += (size * size) / 4;
recursive(r, c-half, half);
} else if(r >= half && c < half) { // 3사분면
cnt += (size * size) / 4 * 2;
recursive(r-half, c, half);
} else if(r >= half && c >= half) { // 4사분면
cnt += (size * size) / 4 * 3;
recursive(r-half, c-half, half);
}
}
}
실행 결과
4. 회고
1) Math.pow 사용할 때는 return 값이 double이므로 int로 명시적 형변환을 해야함을 유의
2) 사분면을 이용한 문제는 처음 해결해보는데, 각 사분면에서 cnt 값을 조절하면서 재귀로 해결할 수 있음
5. Github
https://github.com/iihye/Algorithm/blob/main/Baekjoon/b1074.java
728x90
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준]1436번 영화감독 숌(JAVA) (0) | 2023.08.15 |
---|---|
[백준]1181번 단어 정렬(JAVA) (0) | 2023.08.15 |
[백준]1546번 평균(JAVA) (0) | 2023.08.13 |
[백준]1259번 팰린드롬수(JAVA) (0) | 2023.08.13 |
[백준]10809번 알파벳 찾기(JAVA) (0) | 2023.08.13 |
Comments