ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 행렬 뒤집기
    Coding Test/Algorithm Labs 2023. 3. 23. 22:10

     

     

    문제 :

    뒤집기 게임의 룰은 다음과 같다.

    1. 뒤집기 게임을 진행할 맵과 뒤집기 횟수 N이 주어진다. 이때 맵은 10 ×10 정삼각형 모양의 2차원 배열 형태이면 모든 원소들이 0으로 되어있는 상태이다.
    2. 뒤집기 행위는 뒤집을 원소가 1이면 0으로 만들고, 0이면 1로 만든다는 뜻이다.
    3. 첫 번째 뒤집을 때는 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 0

     

     

    package 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

    댓글

Designed by Tistory.