https://www.acmicpc.net/problem/2630
๋ฑ ๋ด๋ ์ฌ๊ท๋ฅผ ์ฐ๋ ๋ถํ ์ ๋ณต ์ ํ์ ๋ฌธ์ ์ด๋ค. ์์ ์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ํผ ์ ์ด ์์ด์ ๊ธ๋ฐฉ ํ์๋ค.
https://www.acmicpc.net/problem/1780
1. ์ฌ๊ท์ ๋งค๊ฐ๋ณ์๋ก ๋ฐฐ์ด, ์์์ ์ ์ขํ, ์ข ์ด์ ํฌ๊ธฐ๋ฅผ ๋ฃ์๋ค.
2. ์ฌ๊ท ๋ฉ์๋์ ์์์ ์ฐ์ ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ์๋์ง(๊ฐ์ ์์ ์ข ์ด์ธ์ง) ํ์ธ์ ํด์ค๋ค.
3. ๊ฐ์ผ๋ฉด ์ข ์ด ์์ ๋ฐ๋ผ ์นด์ดํธ๋ฅผ ์ฌ๋ฆฌ๊ณ , ๋ค๋ฅด๋ฉด 4๊ฐ๋ก ๋ถํ ํด์ ๊ฐ ์์์ ์ ์ขํ๊ฐ๊ณผ 1/2๋ก ์ข ์ด์ ํฌ๊ธฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด ์ฌ๊ท๋ฅผ ๋๋ฆฐ๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int white = 0;
static int blue = 0;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] paper = new int[N][N];
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < N; j++) {
paper[i][j] = Integer.parseInt(st.nextToken());
}
}
divide(paper, 0, 0, N);
System.out.println(white);
System.out.println(blue);
}
public static void divide(int[][] paper, int a, int b, int n) {
if(isSame(paper, a, b, n)) {
if(paper[a][b] == 0) {
white++;
}else {
blue++;
}
return;
}else {
divide(paper, a, b, n / 2);
divide(paper, a, b + n / 2, n / 2);
divide(paper, a + n / 2, b, n/2);
divide(paper, a + n / 2, b + n / 2, n/2);
}
}
public static boolean isSame(int[][] paper, int a, int b, int n) {
int num = paper[a][b];
for(int i = a; i < a + n; i++) {
for(int j = b; j < b + n; j++) {
if(paper[i][j] != num) {
return false;
}
}
}
return true;
}
}
๊ฒฐ๊ณผ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2304๋ฒ - ์ฐฝ๊ณ ๋ค๊ฐํ (0) | 2022.08.09 |
---|---|
๋ฐฑ์ค 1158๋ฒ - ์์ธํธ์ค ๋ฌธ์ (0) | 2022.08.08 |
๋ฐฑ์ค 11660๋ฒ - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (0) | 2022.08.06 |
๋ฐฑ์ค 12891๋ฒ - DNA ๋น๋ฐ๋ฒํธ (0) | 2022.08.05 |
๋ฐฑ์ค 1931๋ฒ - ํ์์ค ๋ฐฐ์ (0) | 2022.08.05 |