[Baekjoon] 1074๋ฒˆ Z

Hyeonaยท2021๋…„ 7์›” 8์ผ
1

๐Ÿ“— Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
9/14
post-thumbnail

๐Ÿ“ฃ
Baekjoon์—์„œ PASS๋œ ์ฝ”๋“œ๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋จผ์ € ํ’€์ดํ•˜๋Š” ์–ธ์–ด(Java)๊ฐ€ ์ •ํ•ด์ ธ์žˆ์–ด,
ํ’€์ด ์–ธ์–ด(Python, C++, Java)๊ฐ€ ๋ชจ๋‘ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋ฌธ์ œ ์ œ์‹œ


๋ฌธ์ œ

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

๋งŒ์•ฝ, N > 1์ด ๋ผ์„œ ์™ผ์ชฝ ์œ„์— ์žˆ๋Š” ์นธ์ด ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๋ฐฐ์—ด์„ ํฌ๊ธฐ๊ฐ€ 2N-1 ร— 2N-1๋กœ 4๋“ฑ๋ถ„ ํ•œ ํ›„์— ์žฌ๊ท€์ ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค.
๋‹ค์Œ ์˜ˆ๋Š” 22 ร— 22 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ๋ฐฉ๋ฌธํ•œ ์ˆœ์„œ์ด๋‹ค.

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, rํ–‰ c์—ด์„ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
๋‹ค์Œ์€ N=3์ผ ๋•Œ์˜ ์˜ˆ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N, r, c๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

rํ–‰ c์—ด์„ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • 1 โ‰ค N โ‰ค 15
  • 0 โ‰ค r, c โ‰ค 2N



๋ฌธ์ œ ํ’€์ด


์ž…๋ ฅํ•œ ์ขŒํ‘œ๊ฐ€ ๋ช‡๋ฒˆ์งธ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณณ์ธ์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๊ฐ ๋ฐฉ์— ๋„๋‹ฌํ•˜๋Š” ์ˆœ์ฐจ๊ฐ€ ์–ด๋–ค์ง€ ์‚ดํŽด๋ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ๋ฐฉ๋ฒ• 1 : ์‹ค์ œ๋กœ ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ํ•ด๋‹น r, c์™€ ๋™์ผํ•ด์งˆ ๋•Œ ํ•ด๋‹น ์ˆœ๋ฒˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ ‘๊ทผ๋ฐฉ๋ฒ• 2 : ํฌ๊ฒŒ 4๊ฐ€์ง€์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋‹ˆ ํŠน์ง•์„ ์ฐพ์•„ ์ง„ํ–‰ํ•œ๋‹ค.

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ 2๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์ƒ๊ฐ๋‚˜๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์žํ•˜๋Š”๊ฒŒ ์ œ ๊ณต๋ถ€๋ฐฉ๋ฒ•์ด์ง€๋งŒ,
๋ฐฉ๋ฒ•1์˜ ๊ฒฝ์šฐ๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ์กฐ์ •๋˜๋ฉด์„œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ต๊ฒŒ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋ฐฉ๋ฒ• 2๋ฒˆ์œผ๋กœ ํ’€์ด๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์šฐ์„  ๊ฐ€์žฅ ํฐ ํŠน์ง•์„ ๋จผ์ € ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
N์ด ์ •ํ•ด์ง€๋ฉด 2N์ด ์ •ํ•ด์ง€๊ณ , ๊ทธ๋Ÿผ ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ ๊ธˆ๋ฐฉ ๊ตฌํ•ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์กฐ๊ธˆ ์ƒ์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ์˜ ๋ชจ์–‘์„ ๊ฐ–๊ณ  ์žˆ๋Š” Z ๊ณต๊ฐ„์„ ์ €ํฌ๋Š” ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ ‘๊ทผ๋ฐฉ๋ฒ• 2์˜ ๋‚ด์šฉ๋Œ€๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ทธ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ €ํฌ๋Š” i=1, j=2์ผ ๋•Œ์˜ 6์˜ ๊ฐ’์„ ๊ตฌํ•ด๋ด…์‹œ๋‹ค.

๊ทœ์น™์„ ์ฐพ์„ ๋•Œ, ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋„ˆ๋ฌด ํ’€์–ด์“ฐ์ง€ ์•Š๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ๊ฐ’, ๊ทธ๋Œ€๋กœ๋ฅผ ํ•˜๋Š”๊ฒŒ ๋‚˜์ค‘์— ์ฝ”๋“œ๋กœ ์ ์„ ๋•Œ ํŽธํ•œ๊ฑฐ ๊ฐ™๋”๋ผ๊ตฌ์š”.
์ฒ˜์Œ์— ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ 1~4์‚ฌ๋ถ„๋ฉด์˜ ๊ฒฝ๊ณ„๋ฅผ ์ž˜ ํ™•์ธํ•ด์„œ ์•Œ๋งž๋Š” ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ˜„์žฌ ์ €ํฌ๋Š” ๊ฐ ์‹œ์ž‘๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ๋ณ€์˜ ๊ฐ’๊ณผ ์—ฐ๊ฒฐ ์ง€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

์ง€๊ธˆ์˜ ๋ถ„๋ฅ˜๋ฅผ ํ†ตํ•ด 2์‚ฌ๋ถ„๋ฉด์— ์ €ํฌ๊ฐ€ ์›ํ•˜๋Š” i=1, j=2์ด ์†ํ•ด์žˆ์œผ๋‹ˆ,
์ € ์˜์—ญ์œผ๋กœ ์ƒ์„ธ๋ฅผ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

ํ˜„์žฌ์˜ ์˜์—ญ์—์„œ๋Š” ๊ฐ i, j์— ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค!
๋” ์ƒ์„ธํ•˜๊ฒŒ ์˜์—ญ์„ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ฒ€์‚ฌ๋ฅผ ๋ฉˆ์ถ”๋Š” ์กฐ๊ฑด์€ i,j๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•  ๋•Œ๋„ ์žˆ์ง€๋งŒ, ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 1์ด ๋ ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋˜๊ฒ ์ฃ !
์ด ์กฐ๊ฑด์€ ๋ณธ์ธ์ด ํŽธํ•œ๋Œ€๋กœ ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์ด์ „์— ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ์—, ์ง€๊ธˆ ๊ตฌํ•˜๋Š” ๊ฐ’์€ ์ค‘์ฒฉํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ณ ์žํ•˜๋Š”๋ฐ,
0,1,2,3 ์„ ํ˜„์žฌ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ’๊ณผ ์—ฐ๊ด€์ง€์–ด์•ผ ํ•˜๋Š”๊ฒŒ ์–ด๋ ต๋„ค์š”.
์ง€๊ธˆ ์•Œ๊ณ  ์žˆ๋Š” ๊ฑด ํ•œ๋ณ€์˜ ๊ธธ์ด์™€ ์—ฐ๊ด€์ง“๋Š”๊ฒŒ ์ œ์ผ ์ข‹์„ ๊ฒƒ๊ฐ™์•„์„œ ์œ„์ฒ˜๋Ÿผ ํ•œ๋ณ€/2 * ์‚ฌ๋ถ„๋ฉด์œผ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์ด์ „ ๋‹จ๊ณ„์˜ ๋‚ด์šฉ๋„ ์ˆ˜์ •์„ ํ•ด์ค˜์•ผ๊ฒ ์ฃ .

ํ˜„์žฌ ๊ณ ์น˜๋ ค๊ณ  ๋ณด๋‹ˆ ํ•œ๋ณ€/2 * ์‚ฌ๋ถ„๋ฉด๋„ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์กฐ๊ธˆ ์กฐ์ž‘์„ ํ•ด๋ณด๋ ค๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ณด๋‹ˆ, ํ•œ๋ณ€/2 ํ•œ๋ณ€/2 ์‚ฌ๋ถ„๋ฉด์œผ๋กœ ํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ .

์ด๋ ‡๊ฒŒ ๋‹ค์‹œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด, ํ•œ๋ณ€/2 ํ•œ๋ณ€/2 ์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋ชจ๋‘ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.



๋ฌธ์ œ ์ฝ”๋“œ


Java

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

public class Main {
	static int N, R, C, NUM;

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

		N = Integer.parseInt(st.nextToken());
		R = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());

		N = (int) Math.pow(2, N); // 2^N์˜ ์ •์‚ฌ๊ฐํ˜•

		search(0, 0, N);
		System.out.println(NUM);
	}

	public static void search(int i, int j, int MAX) {
		if (MAX == 1)
			return;

		if (R < i + MAX / 2 && C < j + MAX / 2) {
			search(i, j, MAX / 2);
		} else if (R < i + MAX / 2 && C >= j + MAX / 2) {
			NUM += MAX/2 * MAX/2;
			search(i, j + MAX / 2, MAX / 2);
		} else if (R >= i + MAX / 2 && C < j + MAX / 2) {
			NUM += MAX/2 * MAX/2 * 2;
			search(i + MAX / 2, j, MAX / 2);
		} else {
			NUM += MAX/2 * MAX/2 * 3;
			search(i + MAX / 2, j + MAX / 2, MAX / 2);
		}
	}
}



์ œ์ถœ ๊ฒฐ๊ณผ


profile
โœ๐Ÿป ๋ญ๋“  ๋ฐฐ์šฐ๋ฉด ๋‹ค ์ž์‚ฐ์ด ๋˜๊ฒ ์ฃ !

0๊ฐœ์˜ ๋Œ“๊ธ€