본문 바로가기
Algorithm

SW Expert Academy <숫자 배열 회전>

by seungh2 2022. 7. 5.

SW Expert Academy <숫자 배열 회전>

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


숫자 배열 회전

N*N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하여라.

 

입력으로 첫 줄에 테스트케이스의 개수 T가 주어진다.

각 테스트케이스는 첫 줄에 N이 주어지고 그 다음 N개의 줄에 걸쳐 행렬에 대한 정보가 주어진다.

 

출력으로 입력으로 들어온 행렬을 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하면 된다.


문제 해결

시계 방향으로 90도로 돌리는 함수를 구현해서 먼저 90도를 돌리고 해당 행렬을 또 90도 돌리고 또 90도 돌리면 된다.

 

예를 들어 보자.

90도로 돌리면 위와 같은 행렬이 된다. 규칙을 찾기 위해 좌표로 다시 나타내보자.

원래 x좌표는 가로로는 똑같고 세로로 증가하는데 회전하면 가로로 감소하고 세로로 똑같다.

원래 y좌표는 가로로 증가하고 세로로 똑같은데 회전하면 가로로 똑같고 세로로 증가한다.

 

회전하면 y좌표가 회전하기 전 x좌표와 같다. 회전했을 때, x좌표는 y좌표 값의 최댓값 - 회전하기 전의 y좌표 값 + 1이다.


코드

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
	public static void main(String args[]) throws Exception
	{
		
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++)
		{
			int n = 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();   
                }
            }
            int[][] r90 = rotate90(n, map);
            int[][] r180 = rotate90(n, r90);
            int[][] r270 = rotate90(n, r180);
            StringBuffer sb = new StringBuffer();
            System.out.println("#"+test_case);
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    sb.append(r90[i][j]);
                }
                sb.append(" ");
                for(int j = 0; j < n; j++){
                    sb.append(r180[i][j]);
                }
                sb.append(" ");
                for(int j = 0; j < n; j++){
                    sb.append(r270[i][j]);
                }
                if(i != n-1){
	                sb.append("\n");
                }
             }
            System.out.println(sb.toString());
		}
	}
    public static int[][] rotate90(int n, int[][] map){
    	int[][] rotate = new int[n][n];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                rotate[i][j] = map[n-j-1][i];
            }
        }
        return rotate;
    }
}

결과


 

728x90

댓글