[BOJ] 1074๋ฒˆ | Z (C++)

2023. 12. 18. 14:16ใ†Coding Test/BOJ

๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

1074๋ฒˆ: Z

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

www.acmicpc.net

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋ณ„ ์ƒ๊ฐ์—†์ด ๋ฐฐ์—ด ์„ ์–ธํ•˜๊ณ  ๋ถ„ํ•  ์ •๋ณต์„ ํ–ˆ๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ. (\( 2^{15} \times 2^{15} \))

๋ฐฐ์—ด ์—†์ด ์นด์šดํŒ… ๋ณ€์ˆ˜ ํ•˜๋‚˜๋กœ๋งŒ ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์…Œ๋‹ค๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ. (ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ์ ๊ฒ€ํ•˜๋ฉด ๊ฒฐ๊ตญ \(\mathrm{O( 2^{15} \times 2^{15})}\))

 

๊ทธ๋ž˜์„œ 4๋“ฑ๋ถ„์„ ํ•˜๊ณ , ์ฐพ๊ณ ์ž ํ•˜๋Š” (ํ–‰, ์—ด)์ด ํ•ด๋‹น ์นธ์— ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜๋งŒํผ ๋”ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ฐพ๊ณ ์ž ํ•˜๋Š” (ํ–‰, ์—ด)์ด๋ผ๋ฉด, ํ•ด๋‹น ์นธ์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด ํ’€ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, \(4 \times 4 \) ํฌ๊ธฐ์˜ ์‚ฌ๊ฐํ˜•์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์นธ์ด \((3, \ 1)\) ์ด๋ผ๋ฉด,

 

 

\(4 \times 4 \) ํฌ๊ธฐ์ด๋ฏ€๋กœ 4๋“ฑ๋ถ„์„ ํ•˜๋ฉด, ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 2์ธ ์‚ฌ๊ฐํ˜•์ด 4๊ฐœ๊ฐ€ ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค.

 

 

Z ๋ชจ์–‘์œผ๋กœ ์ˆœํšŒ๋ฅผ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์™ผ์ชฝ ์œ„ ๐Ÿ‘‰๐Ÿป ์˜ค๋ฅธ์ชฝ ์œ„ ๐Ÿ‘‰๐Ÿป ์™ผ์ชฝ ์•„๋ž˜ ๐Ÿ‘‰๐Ÿป ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ˆœ์œผ๋กœ ์—ด ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ์œ„ ์‚ฌ๊ฐํ˜•๊ณผ ์˜ค๋ฅธ์ชฝ ์œ„ ์‚ฌ๊ฐํ˜•์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ์นธ์ด ์—†์œผ๋ฏ€๋กœ, ์™ผ์ชฝ ์œ„ ์‚ฌ๊ฐํ˜• ๋„“์ด(4) + ์˜ค๋ฅธ์ชฝ ์œ„ ์‚ฌ๊ฐํ˜• ๋„“์ด(4) = 8 ์„ ์นด์šดํŒ… ๋ณ€์ˆ˜์— ๋”ํ•ด ์ค๋‹ˆ๋‹ค.

 

์™ผ์ชฝ ์•„๋ž˜ ์‚ฌ๊ฐํ˜•์—๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” ์นธ์ด ์žˆ์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์— ๋Œ€ํ•ด ๋‹ค์‹œ 4๋“ฑ๋ถ„ํ•˜๋Š” ์žฌ๊ท€๋ฅผ ์ ์šฉํ•ด์ค๋‹ˆ๋‹ค.

*(์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์‚ฌ๊ฐํ˜•์€ ์ด์ œ ๋ณผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ฒ€์‚ฌ X)

 

๋“ฑ๋ถ„ํ•œ ์‚ฌ๊ฐํ˜•์ด ํ•œ ์นธ์ด ๋  ๋•Œ๊นŒ์ง€ ์ ์šฉํ•˜๋ฉฐ, ์ฐพ๊ณ ์ž ํ•˜๋Š” ์นธ์„ ์ฐพ์•˜๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <iostream>
#include <cmath>

using namespace std;
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

int N, r, c;

void Traversal(int sideLength, int row, int col, int& order) {
    if (sideLength < 2)
        return;
    
    int halfLength = sideLength / 2;

    for (int ri = row; ri < row + sideLength; ri += halfLength) {
        for (int ci = col; ci < col + sideLength; ci += halfLength) {
            bool isExistInCurrentSquareWidth = (ci <= c and c < ci + halfLength);
            bool isExistInCurrentSquareHeight = (ri <= r and r < ri + halfLength);

            if (isExistInCurrentSquareWidth and isExistInCurrentSquareHeight) {
                Traversal(halfLength, ri, ci, order);
                return;
            }
            
            order += halfLength * halfLength;
        }
    }
}


int main() {
    FAST_IO
    cin >> N >> r >> c;

    N = static_cast<int>(pow(2, N));
    int order = 0;

    Traversal(N, 0, 0, order);
    cout << order;

    return 0;
}

 

 

 

728x90
๋ฐ˜์‘ํ˜•