[BJ2630] 색종이 만들기
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ2630] 색종이 만들기

 SW Expert Academy - 숫자 카드 게임 

문제 링크

https://www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

문제 입출력

4
1 0 1 1
1 1 1 1
0 0 0 0
0 0 1 1
4
6

 

문제 풀이

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
	static int ansW, ansB, N;
	static int[][] map;


	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		map = new int[N][N];

		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) map[i][j] = Integer.parseInt(st.nextToken());
		}

		// 풀이
		go(0, N, 0, N);

		// 출력
		System.out.println(ansW);
		System.out.println(ansB);

	} // end main


	// (sy - ey), (sx - ex) 색종이가 다 같은 색으로 칠해져있는지 확인하고
	// 그렇지 않으면 나누는 함수
	private static void go(int sy, int ey, int sx, int ex) {
		// 기저조건: 만약 종이의 너비가 1이라면 return
		if (ey - sy < 1 || ex - sx < 1) return;

		if (!check(sy, ey, sx, ex)) {
			// 만약 전체가 다 같은 색으로 칠해져 있지 않다면
			// 4등분하여 재귀를 탄다. -> 또 다 같은 색으로 칠해져있는지 확인
			go(sy, (sy + ey) / 2, sx, (sx + ex) / 2);
			go(sy, (sy + ey) / 2, (sx + ex) / 2, ex);
			go((sy + ey) / 2, ey, sx, (sx + ex) / 2);
			go((sy + ey) / 2, ey, (sx + ex) / 2, ex);
		} else {
			// 만약 전체가 다 같은 색으로 칠해져 있다면
			// 첫번째 원소를 확인하여 흰색인지/파란색인지 센다.
			if (map[sy][sx] == 0) ansW++;
			else ansB++;
		}

	} // end solution


	private static boolean check(int sy, int ey, int sx, int ex) {
		int prev = map[sy][sx];

		for (int i = sy; i < ey; i++) {
			for (int j = sx; j < ex; j++) {
				if (prev != map[i][j]) return false;
				else prev = map[i][j];
			}

		}

		return true;
	} // end check

}

 

 

 

 

 

 

 

 

 

 

#백준 색종이만들기 java #백준 색종이 만들기 java


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[BJ1446] 지름길  (0) 2022.12.16
[BJ1003] 피보나치 함수  (0) 2022.12.16
[BJ1931] 회의실 배정  (0) 2022.12.16
[BJ1764] 듣보잡  (0) 2022.12.14
[BJ18405] 경쟁적 전염  (0) 2022.11.09