-
행렬 뒤집기Coding Test/Algorithm Labs 2023. 3. 23. 22:10
문제 :
뒤집기 게임의 룰은 다음과 같다.
- 뒤집기 게임을 진행할 맵과 뒤집기 횟수 N이 주어진다. 이때 맵은 10 ×10 정삼각형 모양의 2차원 배열 형태이면 모든 원소들이 0으로 되어있는 상태이다.
- 뒤집기 행위는 뒤집을 원소가 1이면 0으로 만들고, 0이면 1로 만든다는 뜻이다.
- 첫 번째 뒤집을 때는 1행의 원소들과 1열의 원소들을 모두 뒤집는다. 두 번째 뒤집을 때는 2행의 원소들과 2열의 원소들을 모두 뒤집는다. 마찬가지로 i번째 뒤집을 때는 i행의 원소들과 i열의 원소들을 모두 뒤집는다. 이렇게 총 N번의 뒤집기를 한다. (행과 열의 번호는 1번부터 시작한다.)
N이 주어졌을 때 뒤집기 게임을 모두 시행하고 난 뒤의 맵을 출력하는 프로그램을 작성해 보자
입력 :
입력 첫째 줄에는 뒤집을 횟수 N이 주어진다. N은 10 이하의 자연수이다.
출력 :
뒤집기 게임을 하고 난 뒤의 맵의 상태를 출력한다. ( 맵은 숫자 사이에 공백을 두고 출력한다.)
예제 입력 :
1
예제 출력 :
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 :
3
예제 출력 2 :
1 0 0 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0package week2day2; import java.util.Scanner; public class ReverseMatrix { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int array[][] = new int[20][20]; // 넉넉하게 선언 for(int i=1; i<=n; i++) { for(int j=1; j<=10; j++) { // 행 고정, 열 차례대로 뒤집기. if(array[i][j] == 0) array[i][j] = 1; // 1이면 0으로 else array[i][j] = 0; // 0이면 1로 뒤집기 } for(int j=1; j<=10; j++) { // 열 고정, 행 차례대로 뒤집기. if(array[j][i] == 0) array[j][i] = 1; else array[j][i] = 0; } if(array[i][i] == 1) array[i][i] = 0; // 대각선 한번 더 뒤집기 else array[i][i] = 1; } for(int i = 1; i<=10; i++) { // 출력 for(int j=1; j<=10; j++) { System.out.print(array[i][j] + " "); } System.out.println(); } } }
출력 화면 * 대각선 (ex {1,1}, {2,2} .. ) 행렬은 중복되기 때문에 한번 더 뒤집어 줘야 한다.
'Coding Test > Algorithm Labs' 카테고리의 다른 글
대소문자 변환 (1) 2023.03.28 지뢰찾기 (2) 2023.03.27 두번째 최소값 찾기 (1) 2023.03.23 최대값 구하기 (0) 2023.03.21 역으로 출력하기 (1) 2023.03.21