hades

[Baekjoon] 1074๋ฒˆ: Z ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1074๋ฒˆ: Z

hades1 2024. 7. 2. 21:20

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/1074

 

๐Ÿ” ์„ค๊ณ„

2 X 2๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ„๋‹ค๊ฐ€ 2 X 2๊ฐ€ ๋˜์—ˆ์„ ๋•Œ, Z๋ฅผ ๊ทธ๋ฆฌ๋ฉด์„œ ์ˆœ์„œ๋ฅผ ์„ผ๋‹ค.

 

๋‚˜๋ˆ„๋Š” ๊ณผ์ •์—์„œ๋„ Z ๋ชจ์–‘์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

์ค‘์š”ํ•œ ๊ฒƒ์€ ์˜์—ญ์„ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์—์„œ Target ์นธ์ด ์†ํ•˜์ง€ ์•Š์€ ์˜์—ญ์˜ ์นธ ์ˆ˜๋Š” ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ, ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด  ์˜์—ญ์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 2๋ผ๋ฉด, Z๋ฅผ ๊ทธ๋ฆฌ๋ฉด์„œ ์ˆœ์„œ๋ฅผ ์„ผ๋‹ค. 2๋ณด๋‹ค ํฌ๋‹ค๋ฉด Target ์นธ์ด ์†ํ•˜์ง€ ์•Š์€ ์˜์—ญ์˜ ์นธ ์ˆ˜๋ฅผ ๋”ํ•œ๋‹ค.

 

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์—์„œ๋„ Z ๋ชจ์–‘์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;	
int n, r, c, result = 0;

void Z(int cur_length, int start_x, int start_y){
	if (cur_length == 2){
		if (start_x == r && start_y == c){
			return;
		}
		result += 1;
		if (start_x == r && start_y + 1 == c){
			return;
		}
		result += 1;
		if (start_x + 1  == r && start_y== c){
			return;
		}
		result += 1;
		if (start_x + 1 == r && start_y + 1 == c){
			return;
		}
	}
	else{
		int half_x = start_x + cur_length/2;
		int half_y = start_y + cur_length/2;
		int out_x = start_x + cur_length;
		int out_y = start_y + cur_length;
		if (start_x <= r && r < half_x && start_y <= c && c < half_y){
			Z(cur_length/2, start_x, start_y);
			return;
		}
		result += (cur_length/2)*(cur_length/2);
		if (start_x <= r && r < half_x && half_y <= c && c < out_y){
			Z(cur_length/2, start_x, half_y);
			return;
		}
		result += (cur_length/2)*(cur_length/2);
		if (half_x <= r && r < out_x  && start_y <= c && c < half_y){
			Z(cur_length/2, half_x, start_y);
			return;
		}
		result += (cur_length/2)*(cur_length/2);
		if (half_x <= r && r < out_x && half_y <= c && c < out_y){
			Z(cur_length/2, half_x, half_y);
			return;
		}
	}
} 

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	cin >> n >> r >> c;
	Z(pow(2, n), 0, 0);
	cout << result << "\n";
	return 0;
}

 

๐Ÿ“ ๋ฉ”๋ชจ

๋‚ด๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ธ์ง€ํ•˜๊ณ , ํฐ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ–ˆ๋‹ค.