๐Ÿ’ป

[๋ฐฑ์ค€] ๋ถ„ํ• ์ •๋ณต - 1992. ์ฟผ๋“œํŠธ๋ฆฌ(๋ฌธ์ œํ‘ธ๋Š”์ค‘) ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€] ๋ถ„ํ• ์ •๋ณต - 1992. ์ฟผ๋“œํŠธ๋ฆฌ(๋ฌธ์ œํ‘ธ๋Š”์ค‘)

๋˜ํšจ๋‹ˆ 2020. 2. 12. 21:59

๋ฌธ์ œ

ํ‘๋ฐฑ ์˜์ƒ์„ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์ฟผ๋“œ ํŠธ๋ฆฌ(Quad Tree)๋ผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํฐ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 0๊ณผ ๊ฒ€์€ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์˜์ƒ(2์ฐจ์› ๋ฐฐ์—ด)์—์„œ ๊ฐ™์€ ์ˆซ์ž์˜ ์ ๋“ค์ด ํ•œ ๊ณณ์— ๋งŽ์ด ๋ชฐ๋ ค์žˆ์œผ๋ฉด, ์ฟผ๋“œ ํŠธ๋ฆฌ์—์„œ๋Š” ์ด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์œผ๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "0"์ด ๋˜๊ณ , ๋ชจ๋‘ 1๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "1"์ด ๋œ๋‹ค. ๋งŒ์•ฝ 0๊ณผ 1์ด ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ด์ง€๋ฅผ ๋ชปํ•˜๊ณ , ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ์˜์ƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์••์ถ•ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด 4๊ฐœ์˜ ์˜์—ญ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ด„ํ˜ธ ์•ˆ์— ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•œ๋‹ค

์œ„ ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ์˜ ์˜์ƒ์€ ์˜ค๋ฅธ์ชฝ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ˆซ์ž๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์˜์ƒ์„ ์ฟผ๋“œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์••์ถ•ํ•˜๋ฉด "(0(0011)(0(0111)01)1)"๋กœ ํ‘œํ˜„๋œ๋‹ค.  N ×N ํฌ๊ธฐ์˜ ์˜์ƒ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ด ์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1≤N ≤64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N ์˜ ๋ฌธ์ž์—ด์ด N ๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜๋Š” 1์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์˜์ƒ์˜ ๊ฐ ์ ๋“ค์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

์ถœ๋ ฅ

์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

8
11110000
11110000
00011100
00011100
11110000
11110000
11110011
11110011

 

์˜ˆ์ œ ์ถœ๋ ฅ1

((110(0101))(0010)1(0001))

 

์ƒ๊ฐ

์ฒ˜์Œ์—๋Š” ๋ฌธ์ œ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์•„์„œ ํ•œ์ฐธ์„ ๋“ค์—ฌ๋‹ค๋ดค๋‹ค. ์˜ˆ์‹œ ์ž…๋ ฅ์„ ์ง์ ‘ ํ’€์–ด๋ณด๊ณ  ์ดํ•ดํ•ด์•ผ์ง€ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๋Š” ๊ฑด์ง€ ์ž๊พธ ํ’€๋ ค๊ณ ํ•œ๋‹ค. ์˜ˆ์ œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ณ  ์ ‘๊ทผํ•ด๋ณด๋Š” ๋ฐฉ์‹๋„ ๋ฌผ๋ก  ์ข‹์ง€๋งŒ, ์ž˜ ์•ˆ๋œ๋‹ค๋ฉด ์ผ๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์œผ๋กœ ์ƒ๊ฐํ•ด์„œ ํ•ด๊ฒฐ์œ„์ฃผ๋กœ ๋ฐฉํ–ฅ์„ ํ‹€์–ด์•ผํ•œ๋‹ค. ์˜ˆ์ œ ๋ฌธ์ œ๋ฅผ ๊ตณ์ด ์ง์ ‘ ํ’€๋ ค๊ณ  ๋‚‘๋‚‘๋Œ€๋‹ค๊ฐ€ ๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ํ›Œ์ฉ ์ง€๋‚˜๊ฐ„ ๊ฒƒ์„ ๋ณด๊ณ  ์ •์‹ ์ด ๋ฒˆ์ฉ ๋“ค์—ˆ๋‹ค.  

 

Z๋ฌธ์ œ์ฒ˜๋Ÿผ ์ขŒํ‘œ๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๊ณ ๋Š” ๊ฐ์„ ์žก์•˜์—ˆ๋‹ค. ์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์€ ์ขŒํ‘œ๊ฐ’์˜ ํ•ฉ์œผ๋กœ ํ•ด์„œ ํ•ฉ์ด 0์ด๊ฑฐ๋‚˜ ์‚ฌ์ด์ฆˆ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด 0๊ณผ 1์„ ์ถœ๋ ฅํ•ด์ฃผ๊ณ  ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ž˜ ํ’€๋ฆฌ์ง€ ์•Š์•„์„œ ๊ฒฐ๊ตญ ๊ตฌ๊ธ€๋ง์œผ๋กœ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ, ์˜ˆ์ œ์ž…๋ ฅ์„ ๋„ฃ์–ด์„œ ์ถœ๋ ฅ์€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋Š”๋ฐ ์ด์ƒํ•˜๊ฒŒ ์ œ์ถœํ•˜๋ฉด ํ‹€๋ ธ๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค. 

 

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

#include <iostream>

using namespace std;
int arr[64][64];

void compress(int x, int y, int n){ //x:x์ขŒํ‘œ, y:y์ขŒํ‘œ, n:์‚ฌ์ด์ฆˆ
    bool flag = true;
    
    if(n==1){
        cout << arr[x][y];
        return;
    }
    
    int divide = n/2;
    int pixel = arr[x][y];
    for(int i=x; i<x+n && flag ; i++){
        for(int j=y; j<y+n && flag; j++){
            if(pixel!=arr[i][j]){
                flag = false;
            }
        }
    }

    if(flag){ // ๋ชจ๋“  ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ถœ๋ ฅํ•œ๋‹ค.
        cout << pixel;
        return;
    }else{ // ๊ฐ™์ง€ ์•Š์•˜๋‹ค๋ฉด
        cout << '(';
        compress( x, y, divide);  //์™ผ์ชฝ ์œ„
        compress( x, y+divide, divide); //์˜ค๋ฅธ์ชฝ ์œ„
        compress( x+divide, y, divide); //์™ผ์ชฝ ์•„๋ž˜
        compress( x+divide, y+divide, divide); //์˜ค๋ฅธ์ชฝ ์•„๋ž˜
        cout << ')';
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n;
    cin >> n;
    
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            scanf("%1d", &arr[i][j]);
        }
    }
    
    compress(0, 0, n);
    return 0;
}

๋ฐ˜์‘ํ˜•
Comments