๐Ÿ• Baaaaaarking/0x0B๊ฐ• - ์žฌ๊ท€

[BOJ S3] 2603๋ฒˆ: ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

์„ ๋‹ฌ 2022. 5. 22. 05:57
๋ฐ˜์‘ํ˜•

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

 

2630๋ฒˆ: ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์ข…์ด์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด N์ด ์ฃผ์–ด์ ธ ์žˆ๋‹ค. N์€ 2, 4, 8, 16, 32, 64, 128 ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ‰์ข…์ด์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ์ •์‚ฌ๊ฐํ˜•์นธ๋“ค์˜ ์ƒ‰์ด ์œ—์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ข…์ด๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๊ณ , ๊ฐ ์ •์‚ฌ๊ฐํ˜•๋“ค์€ ํ•˜์–€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ฑฐ๋‚˜ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค. ์ฃผ์–ด์ง„ ์ข…์ด๋ฅผ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž˜๋ผ์„œ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํ•˜์–€์ƒ‰ ๋˜๋Š” ํŒŒ๋ž€์ƒ‰ ์ƒ‰์ข…์ด๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ „์ฒด ์ข…์ด์˜ ํฌ๊ธฐ๊ฐ€ N×N(N=2k, k๋Š” 1 ์ด์ƒ 7 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜) ์ด๋ผ๋ฉด ์ข…์ด๋ฅผ ์ž๋ฅด๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ „์ฒด ์ข…์ด๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋กœ์™€ ์„ธ๋กœ๋กœ ์ค‘๊ฐ„ ๋ถ€๋ถ„์„ ์ž˜๋ผ์„œ <๊ทธ๋ฆผ 2>์˜ I, II, III, IV์™€ ๊ฐ™์ด ๋˜‘๊ฐ™์€ ํฌ๊ธฐ์˜ ๋„ค ๊ฐœ์˜ N/2 × N/2์ƒ‰์ข…์ด๋กœ ๋‚˜๋ˆˆ๋‹ค. ๋‚˜๋ˆ„์–ด์ง„ ์ข…์ด I, II, III, IV ๊ฐ๊ฐ์— ๋Œ€ํ•ด์„œ๋„ ์•ž์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋˜‘๊ฐ™์€ ํฌ๊ธฐ์˜ ๋„ค ๊ฐœ์˜ ์ƒ‰์ข…์ด๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ณผ์ •์„ ์ž˜๋ผ์ง„ ์ข…์ด๊ฐ€ ๋ชจ๋‘ ํ•˜์–€์ƒ‰ ๋˜๋Š” ๋ชจ๋‘ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์ด ๋˜์–ด ๋” ์ด์ƒ ์ž๋ฅผ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž˜๋ž์„ ๋•Œ <๊ทธ๋ฆผ 3>์€ <๊ทธ๋ฆผ 1>์˜ ์ข…์ด๋ฅผ ์ฒ˜์Œ ๋‚˜๋ˆˆ ํ›„์˜ ์ƒํƒœ๋ฅผ, <๊ทธ๋ฆผ 4>๋Š” ๋‘ ๋ฒˆ์งธ ๋‚˜๋ˆˆ ํ›„์˜ ์ƒํƒœ๋ฅผ, <๊ทธ๋ฆผ 5>๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ 9์žฅ์˜ ํ•˜์–€์ƒ‰ ์ƒ‰์ข…์ด์™€ 7์žฅ์˜ ํŒŒ๋ž€์ƒ‰ ์ƒ‰์ข…์ด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ข…์ด์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด N๊ณผ ๊ฐ ์ •์‚ฌ๊ฐํ˜•์นธ์˜ ์ƒ‰(ํ•˜์–€์ƒ‰ ๋˜๋Š” ํŒŒ๋ž€์ƒ‰)์ด ์ฃผ์–ด์งˆ ๋•Œ ์ž˜๋ผ์ง„ ํ•˜์–€์ƒ‰ ์ƒ‰์ข…์ด์™€ ํŒŒ๋ž€์ƒ‰ ์ƒ‰์ข…์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์ข…์ด์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด N์ด ์ฃผ์–ด์ ธ ์žˆ๋‹ค. N์€ 2, 4, 8, 16, 32, 64, 128 ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ‰์ข…์ด์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ์ •์‚ฌ๊ฐํ˜•์นธ๋“ค์˜ ์ƒ‰์ด ์œ—์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค. ํ•˜์–€์ƒ‰์œผ๋กœ ์น ํ•ด์ง„ ์นธ์€ 0, ํŒŒ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ง„ ์นธ์€ 1๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ˆซ์ž ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ž˜๋ผ์ง„ ํ–์–€์ƒ‰ ์ƒ‰์ข…์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ํŒŒ๋ž€์ƒ‰ ์ƒ‰์ข…์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

[๐Ÿ• Baaaaaarking/0x0B๊ฐ• - ์žฌ๊ท€] - [BOJ S2][C++] ๋ฐฑ์ค€ 1780๋ฒˆ : ์ข…์ด์˜ ๊ฐœ์ˆ˜

 

[BOJ S2][C++] ๋ฐฑ์ค€ 1780๋ฒˆ : ์ข…์ด์˜ ๊ฐœ์ˆ˜

https://www.acmicpc.net/problem/1780 1780๋ฒˆ: ์ข…์ด์˜ ๊ฐœ์ˆ˜ N×Nํฌ๊ธฐ์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ข…์ด์˜ ๊ฐ ์นธ์—๋Š” -1, 0, 1 ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ํ–‰๋ ฌ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ ์ ˆํ•œ

whkakrkr.tistory.com

์ง์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค

3๋“ฑ๋ถ„ํ•˜๋˜๊ฑธ ๋ฐ˜๋“ฑ๋ถ„(?)ํ•˜๋Š”๊ฑธ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฐ”๋กœ ํ’€๋ฆผ

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>

using namespace std;

int N;
int paper[130][130];
int cnt[2];   // ํฐ์ƒ‰ ๊ฐฏ์ˆ˜, ํŒŒ๋ž€์ƒ‰ ๊ฐฏ์ˆ˜

bool check(int n, int x, int y) {   // (x,y) ๋ถ€ํ„ฐ n๊ฐœ ํฌ๊ธฐ ์ข…์ด๊ฐ€ ๊ฐ™์€ ์ˆซ์ž๋กœ ์ฑ„์›Œ์กŒ๋Š”์ง€ ํ™•์ธ
    for(int i=x; i<x+n; i++)
        for(int j=y; j<y+n; j++)
            if(paper[i][j] != paper[x][y])
                return false;
    
    return true;
}

void recur(int n, int x, int y) {
    if(check(n,x,y)) {
        cnt[paper[x][y]]++;
        return;
    }
    
    int next = n/2;
    for(int i=x; i < x+n; i = i+next)
        for(int j=y; j < y+n; j = j+next)
            recur(next, i, j);
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    // ์ดˆ๊ธฐํ™”
    cnt[0] = 0; cnt[1] = 0;
    
    // ์ž…๋ ฅ
    cin >> N;
    for(int i=0; i<N; i++)
        for(int j=0; j<N; j++)
            cin >> paper[i][j];
    
    // ์žฌ๊ท€
    recur(N, 0, 0);
    
    //์ถœ๋ ฅ
    cout << cnt[0] << "\n" << cnt[1];
    
    return 0;
}

/*
 */

 

๋ฐ˜์‘ํ˜•