๐Ÿ’ป

[๋ฐฑ์ค€] ๋ธŒ๋ฃจํŠธํฌ์Šค - 1018. ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋ธŒ๋ฃจํŠธํฌ์Šค - 1018. ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 3. 1. 21:54

๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” ์ž์‹ ์˜ ์ €ํƒ์—์„œ MN๊ฐœ์˜ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” M*N ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ์ฐพ์•˜๋‹ค. ์–ด๋–ค ์ •์‚ฌ๊ฐํ˜•์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํฐ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8*8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ฐ ์นธ์ด ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰ ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ‰์น ๋˜์–ด ์žˆ๊ณ , ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ฒด์ŠคํŒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ด๋‹ค. ํ•˜๋‚˜๋Š” ๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์ด๋‹ค.

๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, ์ง€๋ฏผ์ด๋Š” 8*8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„์— ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ 8*8 ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค. ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

 

์˜ˆ์ œ ์ถœ๋ ฅ1

1

 

์˜ˆ์ œ ์ž…๋ ฅ2

์˜ˆ์ œ ์ถœ๋ ฅ

12

 

์ƒ๊ฐ

1. ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด 8*8์‚ฌ์ด์ฆˆ์ด๋ฏ€๋กœ ๊ฐ€๋กœ๋Š” (n-8)์นธ, ์„ธ๋กœ๋Š” (m-8)์นธ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. 

2. (i,j) -> i+j๊ฐ€ ์ง์ˆ˜์ผ๋•Œ, i+j๊ฐ€ ํ™€์ˆ˜์ผ๋•Œ ์ƒ‰์ด ๊ฐ™์€ ์ƒ‰์ด์–ด์•ผํ•œ๋‹ค. 

๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ์‹คํŒจํ–ˆ๋‹ค. ์ด์œ ๋Š” ์ฒซ๋ฒˆ์งธ ์นธ์— B๋‚˜ W๋กœ ์น ํ•ด์กŒ์„ ๋•Œ, ํ•œ๊ฐ€์ง€ ๊ฒฝ์šฐ๋งŒ ๊ณ ๋ คํ–ˆ๋˜ ๊ฒŒ ์‹คํŒจ์˜ ์›์ธ์ด์—ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ์นธ์ด B์ด๋ฉด BWBW... ํŒจํ„ด์œผ๋กœ ์ƒ‰์„ ์น ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

์ฒ˜์Œ์— ์ž‘์„ฑํ•œ ์‹คํŒจ ์ฝ”๋“œ

๋”๋ณด๊ธฐ

#include <iostream>

#define MAX 51

using namespace std;

int n,m;
char map[MAX][MAX];
int result = 9999999;
void paint(int x, int y){
    int cnt = 0;
    int color = map[x][y];
    if((x + y) % 2 == 0){ // x+y๊ฐ€ ์ง์ˆ˜์ผ๋•Œ
        for(int i=x; i<x+8; i++){
            for(int j=y; j<y+8; j++){
                if((i + j) % 2 == 0 && map[i][j] != color ){ // ์ง์ˆ˜์— ๋‹ค๋ฅธ ์ƒ‰์ผ ๋•Œ
                    cnt ++;
                }else if((i + j) % 2 != 0 && map[i][j] == color){ //ํ™€์ˆ˜์— ๊ฐ™์€ ์ƒ‰์ผ ๋•Œ
                    cnt ++;
                }
            }
        }
    }else{ // ํ™€์ˆ˜์ผ๋•Œ
        for(int i=x; i<x+8; i++){
            for(int j=y; j<y+8; j++){
                if((i + j) % 2 == 0 && map[i][j] == color ){ // ์ง์ˆ˜์— ๊ฐ™์€ ์ƒ‰์ผ ๋•Œ
                    cnt ++;
                }else if((i + j) % 2 != 0 && map[i][j] != color){ //ํ™€์ˆ˜์— ๋‹ค๋ฅธ ์ƒ‰์ผ ๋•Œ
                    cnt ++;
                }
            }
        }
    }
    result = min(result, cnt);
}

int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n >> m;

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cin >> map[i][j];
        }
    }
    
    int a = n - 8;
    int b = m - 8;

    for(int i=0; i<=a; i++){
        for(int j=0; j<=b; j++){
            paint(i, j);
        }
    }
    
    cout << result << '\n';
    
    return 0;
}

 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include <iostream>
#include <algorithm>

#define MAX 51

using namespace std;

int n,m;
char map[MAX][MAX];
int result = 9999999;
void paint(int x, int y){
    int cntW = 0;
    int cntB = 0;
    
    // B๋กœ ์‹œ์ž‘์ผ๋•Œ
    for(int i=x; i<x+8; i++){
        for(int j=y; j<y+8; j++){
            if((i + j) % 2 == 0){ // ์ง์ˆ˜
                if(map[i][j] == 'W')
                    cntB ++;
            }else {               // ํ™€์ˆ˜
                if(map[i][j] == 'B')
                    cntB ++;
            }
        }
    }
    // W๋กœ ์‹œ์ž‘์ผ๋•Œ
    for(int i=x; i<x+8; i++){
        for(int j=y; j<y+8; j++){
            if((i + j) % 2 == 0){ // ์ง์ˆ˜
                if(map[i][j] == 'B')
                    cntW ++;
            }else {               // ํ™€์ˆ˜
                if(map[i][j] == 'W')
                    cntW ++;
            }
        }
    }
    result = min(result, cntB);
    result = min(result, cntW);
}

int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n >> m;

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cin >> map[i][j];
        }
    }
    
    int a = n - 8;
    int b = m - 8;

    for(int i=0; i<=a; i++){
        for(int j=0; j<=b; j++){
            paint(i, j);
        }
    }
    
    cout << result << '\n';
    
    return 0;
}


๋ฐ˜์‘ํ˜•
Comments