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();
}
}
}