본문 바로가기

카테고리 없음

백준 15925 욱제는 정치왕이야

728x90

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

 

15925번: 욱제는 정치쟁이야!!

첫째 줄에 각 줄의 컴퓨터 개수 N과 이후의 컴퓨터실 사용 여부가 하나의 공백을 사이에 두고 주어진다. 사용 여부는 사용시 1, 미사용시 0으로 주어진다. (1 ≤ N ≤ 31, N % 2 == 1) 이후 둘째 줄부터

www.acmicpc.net

욱제는 컴퓨터를 끄거나 킬수 있다(그 줄의 켜져 있는 컴퓨터가 더 많다면 전부 다 키고 꺼져있는 컴퓨터가 더 많다면  전부 다 끈다.)

 

주어진 입력에서 컴퓨터를 모두 켜야하는 경우와 꺼야하는 경우로 나누고

킬수 있는 줄을 모두 켜보고 모든 컴퓨터가 켜져있으면 1 하나라도 꺼져있으면 답은 0이다. 

package 백준;

import java.util.*;
import java.io.*;

public class 욱제는정치쟁이야 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int flag = sc.nextInt();
		int map[][] = new int[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				map[i][j] = sc.nextInt();
			}
		}
		if (flag == 1) {
			boolean done = false;
			while (!done) {
				done = true;
				int cnt[][] = new int[2][N];
				
				for (int i = 0; i < N; i++) { // i번째행
					for (int j = 0; j < N; j++) {
						if (map[i][j] == 1)
							cnt[0][i]++;
					}
				}

				for (int i = 0; i < N; i++) { // i번째 열 검사
					for (int j = 0; j < N; j++) {
						if (map[j][i] == 1)
							cnt[1][i]++;
					}
				}
				/*
				 * for(int i =0 ;i <2;i++) { for(int j =0 ;j <N;j++) {
				 * System.out.print(cnt[i][j] + " "); } System.out.println(); }
				 */
				int ii = -1, jj = -1;
				for (int i = 0; i < 2; i++) {
					for (int j = 0; j < N; j++) {
						if (cnt[i][j] > N / 2 && cnt[i][j] < N) {
							ii = i;
							jj = j;
							done = false;
						}
					}
				}
			//	System.out.printf("ii= %d jj=%d\n",ii,jj);
			//	printMap(map, N);
				if (ii == -1 && jj == -1)
					break;

				if (ii == 0) {
					for (int j = 0; j < N; j++) {
						map[jj][j] = 1;
					}
				} else {
					for (int j = 0; j < N; j++) {
						map[j][jj] = 1;
					}
				}

			}
			
			for(int i =0 ;i <N;i++) {
				for(int j= 0;j<N;j++) {
					if(map[i][j]==0) {
						System.out.println("0");
						return;
					}
				}
			}
			
			System.out.println("1");
			
		} else {
			boolean done = false;
			while (!done) {
				done = true;
				int cnt[][] = new int[2][N];
				
				for (int i = 0; i < N; i++) { // i번째행
					for (int j = 0; j < N; j++) {
						if (map[i][j] == 0)
							cnt[0][i]++;
					}
				}

				for (int i = 0; i < N; i++) { // i번째 열 검사
					for (int j = 0; j < N; j++) {
						if (map[j][i] == 0)
							cnt[1][i]++;
					}
				}
		
				int ii = -1, jj = -1;
				for (int i = 0; i < 2; i++) {
					for (int j = 0; j < N; j++) {
						if (cnt[i][j] > N / 2 && cnt[i][j] < N) {
							ii = i;
							jj = j;
							done = false;
						}
					}
				}
			//	System.out.printf("ii= %d jj=%d\n",ii,jj);
			//	printMap(map, N);
				if (ii == -1 && jj == -1)
					break;

				if (ii == 0) {
					for (int j = 0; j < N; j++) {
						map[jj][j] = 0;
					}
				} else {
					for (int j = 0; j < N; j++) {
						map[j][jj] = 0;
					}
				}

			}
			
			for(int i =0 ;i <N;i++) {
				for(int j= 0;j<N;j++) {
					if(map[i][j]==1) {
						System.out.println("0");
						return;
					}
				}
			}
			
			System.out.println("1");
		}
	}

	private static void printMap(int[][] map, int N) {
		// TODO Auto-generated method stub
		System.out.println("- --------------");
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				System.out.print(map[i][j] + " ");
			}
			System.out.println();
		}
	}

}