어흥

[해커랭크] Matrix Layer Rotation (Java) 본문

알고리즘/HackerRank

[해커랭크] Matrix Layer Rotation (Java)

라이언납시오 2022. 3. 10. 20:19
728x90
반응형

문제 링크: https://www.hackerrank.com/challenges/matrix-rotation-algo/problem?isFullScreen=true 

 

Matrix Layer Rotation | HackerRank

Rotate the matrix R times and print the resultant matrix.

www.hackerrank.com

 

1. 주의할 점

- R만큼 회전시키지 않는다(적절히 패턴에 맞게 나눈다)

 

2. 구현

- Row와 Col을 구한다

- 해당 직사각형이 몇 개의 껍질로 이루어져있는지 구하여 Times에 저장한다

- Rotate() 함수를 통해 각 껍질에 대해 작업을 수행한다

- 회전되는 수는 각 껍질의 2*(열+행-2)만큼 돌 때, 원래 상태로 돌아오므로 돌려야하는 횟수를 줄이고 Cnt에 저장한다

- 각 껍질을 반시계 방향으로 Cnt만큼 회전시킨다

 

class Result {

    /*
     * Complete the 'matrixRotation' function below.
     *
     * The function accepts following parameters:
     *  1. 2D_INTEGER_ARRAY matrix
     *  2. INTEGER r
     */

    static int row,col;
    static int arr[][];
    
    public static void rotate(int r, int c, int rot,int times){
        for(int t=0;t<times;t++){
            int cnt = rot%((r-2*t)*(c-2*t));
            while(cnt>0){
                int val = arr[t][t];
                for(int j=t;j<col-1-t;j++)  arr[t][j] = arr[t][j+1];
                for(int i=t;i<row-t-1;i++)  arr[i][col-1-t]=arr[i+1][col-1-t];
                for(int j=col-1-t;j>t;j--)  arr[row-t-1][j]=arr[row-t-1][j-1];
                for(int i=row-1-t;i>1;i--)  arr[i][t] = arr[i-1][t]; 
                arr[t+1][t]=val;
                cnt--;
            }
        }
    }
    
    public static void matrixRotation(List<List<Integer>> matrix, int r) {
    // Write your code here
        row = matrix.size();
        col = matrix.get(0).size();
        arr = new int[row][col];
        for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
                arr[i][j] = matrix.get(i).get(j);
        
        int times = Math.min(row,col)/2;
        
        rotate(row,col,r,times);
        
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++)
                System.out.print(arr[i][j]+" ");
            System.out.println();
        }
    }
}
728x90
반응형
Comments