๋ชฉ์ฐจ
https://www.acmicpc.net/problem/2630
๋ฌธ์ ํ์ด
๋ถํ ์ ๋ณต์ ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ์ฌ
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๋๊น์ง ํ์๋ฌธ์ ๋ก ๋๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ ์ฒด์ ํฉ์น๋ ๋ฐฉ๋ฒ์ด๋ค.
1๋ฒ์งธ๋ ๋ชจ๋ ์ขํ๋ฅผ ๋์์ผ๋ก 2์ค for๋ฌธ์ ๋๋ ค ์์ ํ๋จํ๋ค.
=> ๋ชจ๋ ๊ฐ๋ค๋ฉด ์๊น์ ๋ง๊ฒ ์ ์ฅ
=> ํ๋๋ผ๋ ๋ค๋ฅธ ์๊น์ด ์๋ค๋ฉด 4๋ถํ
์ข์ธก์๋จ : x๋ 0~4๊น์ง, y๋ 0~4๊น์ง ํ์
์ข์ธกํ๋จ : x๋ 0~4๊น์ง, y๋ 4~8๊น์ง ํ์
์ฐ์ธก์๋จ : x๋ 4~8๊น์ง, y๋ 0~4๊น์ง ํ์
์ฐ์ธกํ๋จ : x๋ 4~8๊น์ง, y๋ 4~8๊น์ง ํ์
2๋ฒ์งธ๋ x๋ 0~4๊น์ง, y๋ 0~4๊น์ง๋ฅผ ๋์์ผ๋ก 2์ค for๋ฌธ์ ๋๋ ค ์์ ํ๋จํ๋ค.
=> ๋ชจ๋ ๊ฐ๋ค๋ฉด ์๊น์ ๋ง๊ฒ ์ ์ฅ
=> ํ๋๋ผ๋ ๋ค๋ฅธ ์๊น์ด ์๋ค๋ฉด 4๋ถํ ... ๋ฐ๋ณต
ํ์๋ฒ์๋ง ๋ฐ๋ ๋ฟ ์์ ํ๋จํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ธฐ๋๋ฌธ์ colorCheck ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
colorCheck๋ฉ์๋๋ฅผ ์คํํ์ฌ ์์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด white์ blue๋ฅผ +1๋งํผ ์ฆ๊ฐํด์ผํ๋ค.
colorCheck๋ฉ์๋๋ฅผ ์คํํ์ฌ ์์ด ๋ค๋ฅด๋ค๋ฉด ์ขํ๋ฅผ 4๊ฐ๋ก ๋๋์ด์ผํ๋ค.
=> ์์ด ๋ค๋ฅด๋ค๋ฉด ๋ฐ๋ณต์ ์ผ๋ก ์ขํ๋ฒ์๋ฅผ ๋๋๊ณ
๋๋์ด์ง ์ขํ๋ฒ์์์ ์์ด ๊ฐ์์ง๋ฉด, white์ blue์ ๊ฐ์๋ฅผ ์ ์ฒด์ ์ผ๋ก ํฉ์ณ์ผํ๋ค.
๋ฐ๋ผ์ ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ ํ์ด
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ค์ฉ ์ฝ์ผ๋ฉด๋๋ค..!
colorCheck์ for-row, for-col์ ์ฃผ์ด์ง x์ y์ ๋ฒ์๋ฅผ ๋ํ๋ธ๋ค.
์ ์ถ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int white = 0;
static int blue = 0;
static int[][] board;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
board = new int[N][N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < N; j++) {
int num = Integer.parseInt(st.nextToken());
board[i][j] = num;
}
}
//===============================
//์
๋ ฅ๊ฐ ์ ์ฅ
partition(0, 0, N);
//์์ ํ๋จํ ์์์ ์
๋ ฅ
System.out.println(white);
System.out.println(blue);
}
private static void partition(int row, int col, int size) {
//์์ ๋ชจ๋ ๊ฐ์์ง ํ์ธ.
if(colorCheck(row, col, size)){
//์์์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด ์คํ
if(board[row][col] == 0){
white++;
}else{
blue++;
}
return;
}
//์์์ด ๋ชจ๋ ๊ฐ์ง ์๋ค๋ฉด ๋ถํ
int newSize = size / 2;
partition(row, col, newSize); //์ข์ธก์๋จ
partition(row, col+newSize, newSize); //์ข์ธกํ๋จ
partition(row+newSize, col, newSize); //์ฐ์ธก์๋จ
partition(row+newSize, col+newSize, newSize); //์ฐ์ธกํ๋จ
}
private static boolean colorCheck(int row, int col, int size) {
int color = board[row][col]; // ๊ธฐ์ค Color
for(int i = row; i < row + size; i++) {
for(int j = col; j < col + size; j++) {
// ์์ ๊ฐ์ง์์ผ๋ฉด false
if(board[i][j] != color) {
return false;
}
}
}
// ์์ ๋ชจ๋ ๊ฐ์ผ๋ฉด true
return true;
}
}
'๐ฏ Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9095๋ฒ 1, 2, 3 ๋ํ๊ธฐ ์๋ฐ DP (0) | 2022.03.25 |
---|---|
[๋ฐฑ์ค] 1074๋ฒ Z ์๋ฐ (๋ถํ ์ ๋ณต) (0) | 2022.02.24 |
[๋ฐฑ์ค] 1012 ์ ๊ธฐ๋๋ฐฐ์ถ ์๋ฐ BFS, DFS (0) | 2022.02.21 |
[๋ฐฑ์ค] 1697 ์จ๋ฐ๊ผญ์ง 1์ฐจ์ BFS (0) | 2022.02.12 |
[๋ฐฑ์ค] 1966 ํ๋ฆฐํฐ ํ + ํ ์คํธ์ผ์ด์ค (0) | 2022.02.11 |