๐ป
[๋ฐฑ์ค] ๋ถํ ์ ๋ณต - 1992. ์ฟผ๋ํธ๋ฆฌ(๋ฌธ์ ํธ๋์ค) ๋ณธ๋ฌธ
[๋ฐฑ์ค] ๋ถํ ์ ๋ณต - 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;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] DFS์BFS - 2606. ๋ฐ์ด๋ฌ์ค (0) | 2020.02.13 |
---|---|
[๋ฐฑ์ค] ์ฐ์ ์์ ํ - 11286. ์ ๋๊ฐ ํ (0) | 2020.02.13 |
[๋ฐฑ์ค] ๋ถํ ์ ๋ณต - 1654. ๋์ ์๋ฅด๊ธฐ (0) | 2020.02.12 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋ - 11399. ATM (0) | 2020.02.12 |
[๋ฐฑ์ค] ๋์ ๊ณํ๋ฒ - 1904. 01ํ์ผ (0) | 2020.02.12 |