[๋ฐฑ์ค€] Z

๊ฐœ๋ฐœ์ž P๊ตฐยท2025๋…„ 6์›” 17์ผ

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
16/57
post-thumbnail

๐Ÿ”— ๋ฌธ์ œ ๋ณด๊ธฐ - [๋ฐฑ์ค€] Z

๐Ÿ“– ๋ฌธ์ œ

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

โœ… ์ฝ”๋“œ

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.StringTokenizer;  
  
public class Main {  
    static int N, r, c, count = 0;  
    public static void main(String[] args) throws IOException {  
        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());  
  
        int pow = (int)Math.pow(2, N);  
  
        findIndex(0, 0, pow);  
        System.out.println(count);  
    }  
  
    private static void findIndex(int row, int col, int size) {  
        if(size == 1) {  
            return;  
        }  
        int halfSize = size / 2;  
        int blockSize = halfSize * halfSize;  
  
        if(r < row + halfSize && c < col + halfSize) {          // ์ขŒ์ƒ  
            findIndex(row, col, halfSize);  
        } else if(r < row + halfSize && c >= col + halfSize) {   // ์šฐ์ƒ  
            count += blockSize;  
            findIndex(row, col + halfSize, halfSize);  
        } else if(r >= row + halfSize && c < col + halfSize) {   // ์ขŒํ•˜  
            count += blockSize * 2;  
            findIndex(row + halfSize, col, halfSize);  
        } else {   // ์šฐํ•˜  
            count += blockSize * 3;  
            findIndex(row + halfSize, col + halfSize, halfSize);  
        }    }  
}

๐Ÿงฉ ์ฝ”๋“œํ’€์ด

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ทธ๋Ÿฐ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ดํ›„์—๋Š” ๋ถ„ํ• ์ •๋ณต์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
1. findIndex ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ํ•ด๋‹นํ•˜๋Š” ์‚ฌ๋ถ„๋ฉด์— ๋”ฐ๋ผ count ๊ฐ’์„ ๋”ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’‰๋‹ˆ๋‹ค.
2. 1์‚ฌ๋ถ„๋ฉด์ด๋ฉด ๋‹ค์‹œ findIndex๋ฅผ ํ˜ธ์ถœ, ์ดํ›„ ์‚ฌ๋ถ„๋ฉด๋“ค์€ ์ด์ „ ์‚ฌ๋ถ„๋ฉด์˜ ํฌ๊ธฐ ์ด์ƒ์˜ index ๊ฐ’์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— count์— blockSize * N -1 ๊ฐ’์„ ๋”ํ•ด์ค๋‹ˆ๋‹ค.
3. ๋งˆ์ง€๋ง‰ size๊ฐ€ 1์ผ ๋•Œ ๊ตฌํ•ด์ง€๋Š” count์˜ ๊ฐ’์ด ์ •๋‹ต์ด ๋ฉ๋‹ˆ๋‹ค.

profile
๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์–ป์€ ์ƒˆ๋กœ์šด ์ง€์‹์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

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