Algorithm/๋ฐฑ์ค€

๋ฐฑ์ค€ 1074๋ฒˆ - Z

giraffe_ 2022. 8. 21. 15:37

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

 

1074๋ฒˆ: Z

ํ•œ์ˆ˜๋Š” ํฌ๊ธฐ๊ฐ€ 2N × 2N์ธ 2์ฐจ์› ๋ฐฐ์—ด์„ Z๋ชจ์–‘์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 2×2๋ฐฐ์—ด์„ ์™ผ์ชฝ ์œ„์นธ, ์˜ค๋ฅธ์ชฝ ์œ„์นธ, ์™ผ์ชฝ ์•„๋ž˜์นธ, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์นธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด Z๋ชจ์–‘์ด๋‹ค. N > 1์ธ ๊ฒฝ์šฐ, ๋ฐฐ์—ด์„

www.acmicpc.net

 

 

 

 

 

์ด๊ฒƒ๋„ ์˜ˆ์ „์— ํ‘ผ ์ ์ด ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ๋”ฑ ๋ณด๋ฉด ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„ํ• ์ •๋ณต ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„ ์ œํ•œ์ด 0.5์ดˆ๋กœ ์‹œ๊ฐ„์— ์œ ์˜ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์—ญ์‹œ ์˜ˆ์ „์— ํ’€์—ˆ์„ ๋•Œ, ์ฒซ ์‹œ๋„์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋ถ„๋ฉด์— ๋Œ€ํ•ด ์žฌ๊ท€๋ฅผ ๋Œ๋ฆฌ๋‹ค๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.

 

 

 

 

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋Š” ์žฌ๊ท€๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์ „์—, ๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ขŒํ‘œ๊ฐ€ ์–ด๋”” ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋Š”์ง€ ๋จผ์ € ํŒŒ์•…์„ ํ•œ ํ›„, ํ•ด๋‹น ์‚ฌ๋ถ„๋ฉด์— ๋Œ€ํ•ด์„œ๋งŒ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

ex)

3ํ–‰ 1์—ด ์ฐพ๊ธฐ

1. ์ฒ˜์Œ ํฐ ์‚ฌ๊ฐํ˜•์„ 4์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ, 3์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค. -> 3์‚ฌ๋ถ„๋ฉด ํƒ์ƒ‰

2. ๋‘ ๋ฒˆ์งธ ์‚ฌ๊ฐํ˜•์„  4์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ, 4์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค. -> 4์‚ฌ๋ถ„๋ฉด ํƒ์ƒ‰

3. ์‚ฌ๊ฐํ˜•์˜ ํฌ๊ธฐ๊ฐ€ 1์ด ๋˜์–ด์„œ ์ข…๋ฃŒ -> ๊ฒฐ๊ณผ ๋ฆฌํ„ด

 

 

 

์žฌ๊ท€ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ๊ฐํ˜•์˜ ์‹œ์ž‘ ์ขŒํ‘œ์˜ ํ–‰, ์—ด, ์‚ฌ๊ฐํ˜• ์‚ฌ์ด์ฆˆ ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€ํ•จ์ˆ˜ ์•ˆ์—์„œ ์‚ฌ๋ถ„๋ฉด์˜ ์ขŒํ‘œ ๋ฒ”์œ„๋ฅผ ๊ณ„์‚ฐํ•ด, ํ•ด๋‹น ์‚ฌ๋ถ„๋ฉด์— ์œ„์น˜ํ•˜๋ฉด ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰์„ ํ•œ๋‹ค.

์žฌ๊ท€๋ฅผ ํ•  ๋•Œ๋Š” ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ธ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ด ๋˜๋ฉด ์žฌ๊ท€๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int r, c;
	static int count = 0;

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

		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int N = Integer.parseInt(st.nextToken());
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
	
		int size = (int) Math.pow(2, N);
		
		z(0, 0, size);
		
		System.out.println(count);
	}

	public static void z(int i, int j, int size) {
		if(size == 1) { //์ข…๋ฃŒ์กฐ๊ฑด
			return;
		}
		
		if(r < i + size / 2 && c < j + size / 2) { //1์‚ฌ๋ถ„๋ฉด์— ์œ„์น˜
			z(i, j, size / 2);
		}else if(r < i + size / 2 && j + size / 2 <= c) { //2์‚ฌ๋ถ„๋ฉด์— ์œ„์น˜
			count += size * size / 4;
			z(i, j + size / 2, size / 2);
		}else if(i + size / 2 <= r && c < j + size / 2) { //3์‚ฌ๋ถ„๋ฉด์— ์œ„์น˜
			count += size * size / 4 * 2;
			z(i + size / 2, j, size / 2);
		}else { //4์‚ฌ๋ถ„๋ฉด์— ์œ„์น˜
			count += size * size / 4 * 3;
			z(i + size / 2, j + size / 2, size / 2);
		}	
	}

}

 

 

 

 

 

๊ฒฐ๊ณผ