sm 기술 블로그

166. 1780(종이의 개수) - 자바 본문

문제/백준_자바

166. 1780(종이의 개수) - 자바

sm_hope 2022. 7. 31. 12:07
import java.util.*;
import java.io.*;

class Main {
	static int[][] paper;
	static int cntPlus;
	static int cntZero;
	static int cntMinus;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		paper = new int[N][N];

		for (int i = 0; i < N; i++) {
			String[] tmp1 = br.readLine().split(" ");
			for (int j = 0; j < N; j++) {
				paper[i][j] = Integer.parseInt(tmp1[j]);
			}
		}
		cntPlus = 0;
		cntZero = 0;
		cntMinus = 0;

		find(0, 0, N);
		
		System.out.println(cntMinus);
		System.out.println(cntZero);
		System.out.println(cntPlus);

	}

	private static void find(int x, int y, int N) {
		int color = paper[x][y];
		for (int i = x; i < x + N; i++) {
			for (int j = y; j < y + N; j++) {
				if (color != paper[i][j]) {
					for (int k = 0; k < 3; k++) {
						for (int l = 0; l < 3; l++) {
							find(x + k * N / 3, y + l * N / 3, N / 3);
						}
					}
					return;
				}
			}
		}
		
		if (color == -1) cntMinus++;
		else if (color == 0) cntZero++;
		else cntPlus++;
			
	}
}

문제요약

9개로 나누면서 온전한 N*N 색종이를 만들어라

설명

단순히 생각하면 된다.

이런 종이가 N*N 색종이로 표현이 불가능 할때,

다음과 같이 나누고 또 N*N이 되지 않을 때

이런식으로 9개씩 나눈다는 이야기이다.

 

		int color = paper[x][y];

색상을 하나 픽해준다.

		for (int i = x; i < x + N; i++) {
			for (int j = y; j < y + N; j++) {
				if (color != paper[i][j]) {

이제 비교를 하는데 픽한 색상과 다르다면 if문 조건에 들어간다.

					for (int k = 0; k < 3; k++) {
						for (int l = 0; l < 3; l++) {
							find(x + k * N / 3, y + l * N / 3, N / 3);
						}
					}
					return;
				}
			}
		}

색상이 다를경우 9개로 나누어야 한다.

따라서 k와 l을 통해 9번 find함수가 실행되고

9등분한 각 부분의 첫번째를 x,y에 넣어 find를 호출한다.

		if (color == -1) cntMinus++;
		else if (color == 0) cntZero++;
		else cntPlus++;

각 색상의 카운터를 바로바로 증가시켜준다.

 

		System.out.println(cntMinus);
		System.out.println(cntZero);
		System.out.println(cntPlus);

출력을 통해 원하는 결과를 얻을 수 있다.

'문제 > 백준_자바' 카테고리의 다른 글

168. 1629(이항계수3) - 자바  (0) 2022.08.01
167. 1629(곱셈) - 자바  (0) 2022.07.31
165. 1992(쿼드트리) - 자바  (0) 2022.07.30
164. 2630 (색종이 만들기) - 자바  (0) 2022.07.30
163. 5430(AC) - 자바  (0) 2022.07.28
Comments