[Boj_1074] Z

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

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

 

1074๋ฒˆ: Z

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

www.acmicpc.net

 

โ–ธ ๋ฌธ์ œ

ํ•œ์ˆ˜๋Š” ํฌ๊ธฐ๊ฐ€ 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
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ๋ถ„ํ•  ์ •๋ณต, ์žฌ๊ท€
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

์•ž์„œ ํฌ์ŠคํŒ…ํ–ˆ๋˜ ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ, ์ฟผ๋“œํŠธ๋ฆฌ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ

N์˜ ๋ฒ”์œ„๊ฐ€ ์ตœ๋Œ€ 15์ด๋ฏ€๋กœ 2^15 ์‚ฌ์ด์ฆˆ์˜ map์„ ๋ชจ๋‘ ์ž‘๊ฒŒ ๋ถ„ํ• ํ•ด r, c๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•œ๋‹ค๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋จผ์ € r, c๊ฐ€ 1, 2, 3, 4 ์‚ฌ๋ถ„๋ฉด ์ค‘ ์–ด๋А ์‚ฌ๋ถ„๋ฉด์— ์†ํ•ด์žˆ๋Š”์ง€ ์ฒดํฌํ•ด ์ฃผ๊ณ ,

r, c๊ฐ€ ์†ํ•ด์žˆ๋Š” ์‚ฌ๋ถ„๋ฉด์—์„œ๋งŒ ์žฌ๊ท€๋ฅผ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด size = 4์ธ ์ด์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ๊ณ , r = 1, c = 1์˜ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•˜์ž

0 1 4 5
2 3 6 7
8 9 12 13
10 11 14 15

(1, 1)์€ 1 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๊ณ , size/2๋กœ 1 ์‚ฌ๋ถ„๋ฉด์— ๋Œ€ํ•œ ์žฌ๊ท€๋ฅผ ํƒ€๋ฉด

0 1
2 3

์œ„์™€ ๊ฐ™์ด size = 2์ธ ์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋˜ ๋‚˜๋‰œ๋‹ค.

์—ฌ๊ธฐ์„œ (1, 1)์€ 4 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๊ณ , ๋‹ค์‹œ size/2๋กœ ์‚ฌ๋ถ„๋ฉด์— ๋Œ€ํ•œ ์žฌ๊ท€๋ฅผ ํƒ€๋ฉด

3

size = 1์ธ 1 ์‚ฌ๋ถ„๋ฉด ๊ฐ’๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ 1 ์‚ฌ๋ถ„๋ฉด์˜ ๊ฐ’์ธ 3์ด ์ •๋‹ต์ด ๋˜๊ณ , size = 1์ผ ๊ฒฝ์šฐ return ์กฐ๊ฑด์ด ๋œ๋‹ค.

 

๊ทธ๋Ÿผ 1, 2, 3, 4 ์‚ฌ๋ถ„๋ฉด์˜ ๋ฒ”์œ„์— ๋Œ€ํ•œ if ์กฐ๊ฑด๋ฌธ์ด ๊ฐ๊ฐ ์žˆ๊ณ , ๊ทธ๋•Œ๋งˆ๋‹ค ์ด์ฐจ์› ๋ฐฐ์—ด์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ๊ตฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

0 1 4 5
2 3 6 7
8 9 12 13
10 11 14 15

๋จผ์ €, ์ด์ฐจ์› ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— size๊ฐ€ 4์ผ ๊ฒฝ์šฐ 16๊ฐ€์ง€์˜ ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ์‹œ์ž‘์ด 0๋ถ€ํ„ฐ์ด๋ฏ€๋กœ 0~15๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

์ด๋•Œ ๋งŒ์•ฝ, 2 ์‚ฌ๋ถ„๋ฉด์— ์žฌ๊ท€๋ฅผ ํƒ„๋‹ค๊ณ  ํ•˜๋ฉด, 1 ์‚ฌ๋ถ„๋ฉด์˜ 0~3์„ ์„ธ์–ด์ฃผ๊ณ  4๋ถ€ํ„ฐ ๊ฐ’์ด ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

3 ์‚ฌ๋ถ„๋ฉด์˜ ์žฌ๊ท€๋ฅผ ํƒ„๋‹ค๊ณ  ํ•˜๋ฉด, 1 2 ์‚ฌ๋ถ„๋ฉด์˜ 0~7์„ ์„ธ์–ด์ฃผ๊ณ  8๋ถ€ํ„ฐ ๊ฐ’์ด ์‹œ์ž‘๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ ์‚ฌ๋ถ„๋ฉด์˜ 0, 4, 8, 12๊ฐ€ ํ•ด๋‹น ์‚ฌ๋ถ„๋ฉด์˜ ์‹œ์ž‘๊ฐ’์ด ๋œ๋‹ค.

 

2 ์‚ฌ๋ถ„๋ฉด : (size* size)/4

3 ์‚ฌ๋ถ„๋ฉด : ((size* size)/4) * 2

4 ์‚ฌ๋ถ„๋ฉด : ((size* size)/4) * 3

 

๊ฐ ์žฌ๊ท€์—์„œ ์œ„์™€ ๊ฐ™์ด ๊ณ„์‚ฐํ•˜์—ฌ ์‹œ์ž‘๊ฐ’์„ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 11636KB
์‹œ๊ฐ„ : 84ms
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    static int n, r, c;
    static int ans = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken()); // 2N × 2N
        // rํ–‰ c์—ด์„ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธ
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
        int size = (int)Math.pow(2, n); // ํ•œ ๋ณ€์˜ ๊ธธ์ด

        partition(0, 0, size); // ์‹œ์ž‘์ , ํ•œ ๋ณ€์˜ ๊ธธ์ด
        bw.append(ans + "\n");
        bw.flush();
        bw.close();
        br.close();
    }

    private static void partition(int x, int y, int size) {
        // ๋” ์ด์ƒ ๋ถ„ํ•  ๋ถˆ๊ฐ€๋Šฅ
        if (size == 1) return;

        // rํ–‰ c์—ด์ด ๋ช‡ ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋Š”์ง€ ์ฒดํฌ
        int newSize = size/2;
        // 1 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋ฉด ์ ˆ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•ด์„œ ์žฌ๊ท€ (rํ–‰ c์—ด์ด ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธ)
        if (r < x+newSize && c < y+newSize) partition(x, y, newSize);
        // 2 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋ฉด
        if (r < x+newSize && c >= y+newSize) {
            ans += (size*size) / 4; // ex) size = 2์ผ๋•Œ, 2์‚ฌ๋ถ„๋ฉด์ด 1๋ฒˆ์งธ ๋ฐฉ๋ฌธ
            partition(x, y+newSize, newSize);
        }
        // 3 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋ฉด
        if (r >= x+newSize && c < y+newSize) {
            ans += ((size*size) / 4) * 2;
            partition(x+newSize, y, newSize);
        }
        // 4 ์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋ฉด
        if (r >= x+newSize && c >= y+newSize) {
            ans += ((size*size) / 4) * 3;
            partition(x+newSize, y+newSize, newSize);
        }
    }
}

 

 

 

๐Ÿ“ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์€ ๋ฐฑ์ค€ ๋ฌธ์ œ

 

 

๐Ÿ“ƒ reference

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Boj_21921] ๋ธ”๋กœ๊ทธ  (1) 2023.12.04
[Boj_2447] ๋ณ„ ์ฐ๊ธฐ - 10  (0) 2023.11.28
[Boj_1992] ์ฟผ๋“œํŠธ๋ฆฌ  (1) 2023.11.28
[Boj_2630] ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ  (0) 2023.11.24
[Boj_20002] ์‚ฌ๊ณผ๋‚˜๋ฌด  (0) 2023.11.21