백준 - 1074 : Z [자바]

HungAh.log·2021년 8월 18일
0
post-custom-banner

분할과 정복 문제에 약한 것 같다.
문제 이해는 되는데 코드로 구현하려면 머리가 멍~해져서 구글링..
여러 문제를 풀고, 좋은 풀이들을 보면서 익숙해지도록 반복해야겠다!

<while문을 이용한 풀이>

import java.io.*;
import java.util.*;

public class Main {
	static int input[][];

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt(st.nextToken()); // 2^N 제곱
		int r = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());

		int n = (int) Math.pow(2, N);
		int cnt = 0;
		int x = 0, y = 0;

		while (n != 1) {
			n /= 2;
			if (r < x + n && c < y + n) { // 왼쪽 위

			} else if (r < x + n && c >= y + n) { // 오른쪽 위
				cnt += n * n;
				y += n;
			} else if (r >= x + n && c < y + n) { // 왼쪽 아래
				cnt += n * n * 2;
				x += n;
			} else if (r >= x + n && c >= y + n) { // 오른쪽 아래
				cnt += n * n * 3;
				x += n;
				y += n;
			}
		}
		System.out.println(cnt);
		br.close();
	}
}




<재귀를 이용한 풀이>

import java.io.*;
import java.util.*;

public class Main {
	static int input[][];
	static int cnt, n, N, r, c;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		N = Integer.parseInt(st.nextToken()); // 2^N 제곱
		r = Integer.parseInt(st.nextToken()); 
		c = Integer.parseInt(st.nextToken()); 
        
		int n = (int) Math.pow(2, N);
		cnt = 0;
		dfs(n, 0, 0);
	}

	static void dfs(int n, int row, int col) {
		if (n == 2) {
			for (int i = 0; i < 2; i++) {
				for (int j = 0; j < 2; j++) {
					int nr = row + i;
					int nc = col + j;
					if (nr == r && nc == c) {
						System.out.println(cnt);
						System.exit(0);
					}
					cnt++;
				}
			}
			return;
		}
		dfs(n / 2, row, col);
		dfs(n / 2, row, col + n / 2);
		dfs(n / 2, row + n / 2, col);
		dfs(n / 2, row + n / 2, col + n / 2);
	}
}
profile
👩🏻‍💻
post-custom-banner

0개의 댓글