BOJ_S3_2630
๐ [S3_2630] ์์ข ์ด ๋ง๋ค๊ธฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static int[][] arr;
static int zero,one;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// ์ข
์ด ํฌ๊ธฐ
int N = Integer.parseInt(br.readLine());
arr = new int[N][N];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine(), " ");
for(int j=0; j<N; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
// 0 ์ผ๋ก ์ด๊ธฐํ
zero = 0;
one = 0;
go(0,0,N);
sb.append(zero).append("\n");
sb.append(one);
System.out.println(sb);
}
static void go(int row, int col, int size){
// ๋ค ๋๊ฐ์ผ๋ฉด
if(check(row, col, size)){
// ๊ฐ์ ๊ฐ์ด 0 ์ผ๋
if(arr[row][col] == 0){
zero++;
}
// ๊ฐ์ ๊ฐ์ด 1 ์ผ๋
else{
one++;
}
return;
}
// ๋ค๋ฅด๋ฉด ์ฌ๊ท
else{
size /= 2;
// ์ผ์ชฝ ์
go(row,col,size);
// ์ค๋ฅธ์ชฝ ์
go(row,col+size,size);
// ์ผ์ชฝ ์๋
go(row+size,col,size);
// ์ค๋ฅธ์ชฝ ์๋
go(row+size,col+size,size);
}
}
// ๊ฐ์ ์ ์ธ์ง ์๋์ง ๊ฒ์ฌ
static boolean check(int row, int col, int size){
int first = arr[row][col];
for(int i=row; i<row+size; i++){
for(int j=col; j<col+size; j++){
if(arr[i][j] != first){
return false;
}
}
}
return true;
}
}
๐ค ๋์ ์๊ฐ
์ต๊ทผ์ ํ์๋ S2_1780 ๋ฌธ์ ์ ๊ฐ์ ์ ํ์ ๋ฌธ์ ์ด๋ค.
๊ทธ๋์ ์์ฝ๊ฒ ํ ์ ์์๋ค.
์ด ๋ฌธ์ ๋ 4๋ฑ๋ถ์ ํ๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ๊ฐ ๋ ์ ์๋ค. check() ๋ฉ์๋๋ฅผ ํตํด ๋ฒ์ ์์ ๊ฐ๋ค์ด ๋ค ๊ฐ์ ๊ฐ์ธ์ง ํ์ธํ๊ณ ๊ฐ์ ๊ฐ์ด๋ฉด true, ๋ค๋ฅธ ๊ฐ์ด๋ฉด false๋ฅผ ๋ฐํํ์๋ค.
๊ทธ๋ฆฌ๊ณ go() ๋ฉ์๋๋ก check() ๋ฅผ ํตํด true๋ฉด ๊ทธ ์๊ฐ 0์ธ์ง 1์ธ์ง ํ์ธํ๊ณ ์นด์ดํ
์ ํด์คฌ๋ค.
๋ง์ฝ false ๋ฉด 4๋ฑ๋ถ์ ํด์ฃผ๊ณ ์ฌ๊ท๋ฅผ ์คํํ์๋ค. size ๋ฅผ 2๋ก ๋๋์ด ๊ทธ ๊ฐ์ ํตํด go()๋ฅผ ๋ค์ ํธ์ถํด์ฃผ์๋ค.
์ต๊ทผ์ ํผ ๋ฌธ์ ์ ์ ํ์ ๋ค์ ํ์ด์ ๋ง์ถ๋ ๊ธฐ๋ถ์ด ์์ฃผ ์ข์๋ค.