어흥
[해커랭크] Matrix Layer Rotation (Java) 본문
728x90
반응형
문제 링크: https://www.hackerrank.com/challenges/matrix-rotation-algo/problem?isFullScreen=true
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
반응형
'알고리즘 > HackerRank' 카테고리의 다른 글
[해커랭크] Chocolate Feast (C++) (0) | 2021.08.11 |
---|---|
[해커랭크] Alternating Characters (Java) (0) | 2021.03.30 |
[해커랭크] Game of Thrones - I (C++) (0) | 2021.03.11 |
[해커랭크] Anagram (C++) (0) | 2021.02.24 |
[해커랭크] Palindrome Index (C++) (0) | 2021.02.23 |
Comments