Basic
2-3: 뒤집게 게임2
SWC123
2018. 10. 24. 19:38
뒤집기 게임2 (inout2.cpp)
문제
뒤집기 게임의 룰은 다음과 같다.
- 뒤집기 게임을 진행할 맵과 뒤집기 횟수 N이 주어진다.
- 뒤집기 행위는 뒤집을 원소가 1이면 0으로 만들고, 0이면 1로 만든다는 뜻이다.
- 첫번째 뒤집을 때는 1행의 원소들과 1열의 원소들을 모두 뒤집는다. 두번째 뒤집을 때는 2행의 원소들과 2열의 원소들을 모두 뒤집는다. 마찬가지로 i번째 뒤집을 때는 i행의 원소들과 i열의 원소들을 모두 뒤집는다. 이렇게 총 N번의 뒤집기를 한다. (행과 열의 번호는 1번부터 시작한다.)
10×10크기 맵의 상태와 N이 주어졌을 때 뒤집기 게임을 모두 시행하고 난 뒤의 맵을 출력하는 프로그램을 작성해보자
입력
입력 첫째 줄에는 뒤집을 횟수 N이 주어진다. N은 10 이하의 자연수이다.
둘째 줄에는 10×10크기 맵의 상태가 주어진다.
출력
뒤집기 게임을 하고난 뒤의 맵의 상태를 출력한다.
예제 입력
1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
예제 출력
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
예제 입력
2
0 0 1 1 1 0 0 1 1 1
1 0 1 0 1 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 1 0 1 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 1 1 1
1 0 0 0 0 0 0 0 0 0
예제 출력
1 0 0 0 0 1 1 0 0 0
1 1 0 1 0 1 1 0 1 1
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 1 1 0 1 0 0 1 0 0
0 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 1 1 1
0 1 0 0 0 0 0 0 0 0
import java.util.Scanner;
public class InOut2 {
/**
* 뒤집기 게임의 룰은 다음과 같다.
*
* 뒤집기 게임을 진행할 맵과 뒤집기 횟수 N이 주어진다. 이때 맵은 10×10정삭각형 모양의 2차원 배열 형태이면 모든 원소들이 0으로 되어있는 상태이다.
* 뒤집기 행위는 뒤집을 원소가 1이면 0으로 만들고, 0이면 1로 만든다는 뜻이다.
* 첫번째 뒤집을 때는 1행의 원소들과 1열의 원소들을 모두 뒤집는다. 두번째 뒤집을 때는 2행의 원소들과 2열의 원소들을 모두 뒤집는다. 마찬가지로 i번째 뒤집을 때는 i행의 원소들과 i열의 원소들을 모두 뒤집는다. 이렇게 총 N번의 뒤집기를 한다. (행과 열의 번호는 1번부터 시작한다.)
* N이 주어졌을 때 뒤집기 게임을 모두 시행하고 난 뒤의 맵을 출력하는 프로그램을 작성해보자
*
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numFlips = sc.nextInt();
int arr[][] = new int[10][10];
//init arr according to input
for (int i=0; i< arr.length; i++){
for (int j=0; j<arr[0].length; j++){
arr[i][j] = sc.nextInt();
}
}
for (int i=0 ; i<numFlips; i++){
flipArr(arr, i);
}
printArr(arr);
}
private static void printArr(int[][] arr) {
for (int i=0; i< arr.length; i++){
for (int j=0; j<arr[0].length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
private static void flipArr(int[][] arr, int n) {
for (int i=0; i<arr.length; i++){
arr[i][n] = arr[i][n] == 1? 0: 1;
}
for (int i=0; i<arr.length; i++){
if (i==n) continue;
arr[n][i] = arr[n][i] == 1? 0: 1;
}
}
}