본문 바로가기
알고리즘 문제

[알고리즘 문제] Matrix Upside Down 2

by 박연호의 개발 블로그 2019. 3. 26.


import java.util.Scanner;

public class Main {
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;

int[][] ary = new int[10][10];

for (int a = 0; a < 10; a++) { // 입력받은 배열로 초기화 해준다.
for (int b = 0; b < 10; b++) {
ary[a][b] = sc.nextInt();
}
}

for (int i = 0; i < n; i++) {

for (int x = 0; x < 10; x++) { // x부분을 뒤집는 부분
if (ary[i][x] == 1) { // 1이면 0으로, 0이면 1로 바꿔준다.
ary[i][x] = 0;
} else {
ary[i][x] = 1;
}
}

for (int y = 0; y < 10; y++) { // x과정과 똑같은 방법으로 뒤집어준다.
if (ary[y][i] == 1) {
ary[y][i] = 0;
} else {
ary[y][i] = 1;
}
}

if (ary[i][i] == 1) { // 1,1 / 2,2 / ..의 경우 x와 y에서 중복되게 뒤집어 주므로 결국에는 반대숫자가 나온다.
ary[i][i] = 0;
} else {
ary[i][i] = 1;
}
}

for (int q = 0; q < 10; q++) {
for (int w = 0; w < 10; w++) {
System.out.print(ary[q][w] + " ");
}
System.out.println("");
}
}
}


Matrix Upside Down 1과 비슷하지만 차이점은 행렬을 0으로 초기화 하지 않고 입력받는점이다. 

먼저 행렬을 입력받은 숫자로 초기화 한 다음에 x,y부분을 모두 뒤집어 준다. 여기서 1,1 / 2,2 / ....부분은 중복으로 뒤집어 지게 된다. 원하는 결과는 한번 뒤집어 지는 결과이기 때문에 1->0, 0->1으로 만들어 준다.