๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 1074 Z

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 18.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/1074

  • ํ•œ์ˆ˜๋Š” ํฌ๊ธฐ๊ฐ€ 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์—ด์„ ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ๋ฐฐ์—ด์„ 4๋“ฑ๋ถ„ํ•˜์—ฌ 1,2,3,4๋ถ„๋ฉด์œผ๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ตฌํ•ด์•ผ๋˜๋Š” ์—ด๊ณผ ํ–‰์„ ๊ธฐ์ค€์œผ๋กœ 4๋“ฑ๋ถ„ํ•œ ๋ถ€๋ถ„์˜ ์–ด๋Š ๋ถ€๋ถ„์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น๋˜๋Š” ์‚ฌ๋ถ„๋ฉด์˜ ์‹œ์ž‘์ ์˜ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ €์žฅํ•œ๋‹ค.
  • ์‹œ์ž‘์ ์˜ ์ˆซ์ž๋Š” ํฌ๊ธฐ๋ฅผ ๊ณฑํ•œ ๊ฐ’์— ํ•ด๋‹น ์‚ฌ๋ถ„๋ฉด์— ํ•ด๋‹นํ•˜๋Š” 0 ~ 3๊นŒ์ง€์˜ ๊ฐ’์„ ๊ณฑํ•œ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์—๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด์„œ ์ˆซ์ž์˜ ๊ทœ์น™์„ฑ์„ ์ฐพ์•„์„œ ํ•ด๋‹น ํ–‰๊ณผ ์—ด์˜ ์ˆซ์ž๋งŒ ๊ณ„์‚ฐํ•ด์„œ ์ €์žฅํ•  ์ƒ๊ฐ์ด์˜€์ง€๋งŒ ์ƒ๊ฐ์ฒ˜๋Ÿผ ์ž˜ ๋˜์ง€ ์•Š์•„์„œ ๋ถ„ํ• ์ •๋ณต์œผ๋กœ ํ’€์—ˆ๋‹ค...
  • ์‚ฌ์‹ค ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋กœ ํ•œ๋ฒˆ ํ‹€๋ ธ๋Š”๋ฐ... ์œ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๋ ค๊ณ  ๋ฐฐ์—ด ์„ ์–ธํ•ด๋†“์€ ๊ฒƒ์„ ์•ˆ์ง€์›Œ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚œ ๊ฒƒ์ด์˜€๋‹ค.... (๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ ๊ฒƒ๋งŒ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ผ๋‹ˆ.. ใ…œใ…œ)

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ์กฐ์‹ฌํ•˜์ž...!!

์ฝ”๋“œ

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

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

        StringTokenizer st = new StringTokenizer(br.readLine());

        // ๋ฐฐ์—ด์˜ ํฌ๊ธฐ
        int N = Integer.parseInt(st.nextToken());
        // ํ–‰
        int r = Integer.parseInt(st.nextToken());
        // ์—ด
        int c = Integer.parseInt(st.nextToken());

        // 2์˜ N์ œ๊ณฑ ๊ตฌํ•˜๊ธฐ
        int num = (int)Math.pow(2, N);
        // ๊ฒฐ๊ณผ๊ฐ’
        int result = 0;

        // ํฌ๊ธฐ๊ฐ€ 1๋ณด๋‹ค ํฌ๋ฉด ๊ณ„์† ๋ฐ˜๋ณต
        while(num > 1){
            // ํฌ๊ธฐ๋ฅผ 2๋กœ ๊ณ„์† ๋‚˜๋ˆ” (์‚ฌ๋ถ„๋ฉด์œผ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•ด์„œ)
            num = num / 2;

            // ํ–‰๊ณผ ์—ด์ด 2๋กœ ๋‚˜๋ˆˆ ์‚ฌ์ด์ฆˆ ์ˆซ์ž๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
            // 2์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋Š” ๋œป
            if(r < num && c < num){
                // ๊ฒฐ๊ณผ๊ฐ’์— ์‹œ์ž‘์ ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•จ
                result = result + num * num * 0;
            }
            // ํ–‰์ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ์ž‘๊ณ  ์—ด์ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๋‹ค๋ฉด
            // 1์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋Š” ๋œป
            else if(r < num && c >= num){
                result = result + num * num * 1;

                // ์—ด์˜ ํฌ๊ธฐ๋ฅผ ํ˜„์žฌ ์‚ฌ์ด์ฆˆํฌ๊ธฐ๋งŒํผ ๋นผ์คŒ
                // ๋‹ค์‹œํ•œ๋ฒˆ ์ž‘๊ฒŒ ์‚ฌ๋ถ„๋ฉด์„ ๋‚˜๋ˆ ์„œ ๊ตฌ๋ถ„ํ•ด์•ผ๋˜๋ฏ€๋กœ
                c = c - num;
            }
            // ํ–‰์ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๊ณ  ์—ด์ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
            // 3์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋Š” ๋œป
            else if(r >= num && c < num){
                result = result + num * num * 2;

                // ํ–‰์˜ ํฌ๊ธฐ๋ฅผ ํ˜„์žฌ ์‚ฌ์ด์ฆˆํฌ๊ธฐ๋งŒํผ ๋นผ์คŒ
                r = r - num;
            }
            // ํ–‰๊ณผ ์—ด์ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ๋ชจ๋‘ ํฌ๋‹ค๋ฉด
            // 4์‚ฌ๋ถ„๋ฉด์— ์žˆ๋‹ค๋Š” ๋œป
            else{
                result = result + num * num * 3;

                // ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๋ฅผ ํ˜„์žฌ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋นผ์คŒ
                c = c - num;
                r = r - num;
            }
        }

        System.out.println(result);
    }
}