본문 바로가기
CodeSignal

rotateImage

by Doromi 2024. 2. 28.
728x90
반응형
주어진 2D 행렬을 90도 시계 방향으로 회전시키는 문제
추가적인 메모리를 O(1)만 사용하여 풀어야 합니다. 여기서는 주어진 행렬을 원래의 행렬에 덮어씌우면서 회전을 진행하는 방법을 사용할 수 있습니다. 이를 위해서는 주어진 행렬을 다음과 같이 네 단계로 나눠서 회전시킬 수 있습니다:

주어진 행렬을 대각선을 기준으로 대칭시킵니다.
행렬의 각 행을 뒤집습니다.
int[][] solution(int[][] a) {
   int n = a.Length;
   
   for(int i = 0;i<n;i++){
       for(int j = 0;j<i;j++){
           int tmp = a[i][j];
           a[i][j] = a[j][i];
           a[j][i] = tmp;
       }
   }
   
   for(int i = 0;i<n;i++){
       for(int j = 0;j<n/2;j++){
           int tmp = a[i][j];
           a[i][j] = a[i][n-1-j];
           a[i][n-1-j] = tmp;
       }
   }
    return a;
}

예를 들어,

a = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]


의 경우,

첫번째로 대각선 대칭을 하면,

a = [[1, 4, 7],
     [2, 5, 8],
     [3, 6, 9]]

가 되고,

여기서 행 반전을 하게 되면

a = [[7, 4, 1],
     [8, 5, 2],
     [9, 6, 3]]

원하는 결과가 나오는 것을 확인할 수 있습니다.

 

180도의 경우는 그럼 90도 한 것을 2번 수행하면 나올 것입니다.

728x90
반응형

'CodeSignal' 카테고리의 다른 글

isCryptSolution  (0) 2024.03.07
sudoku2  (2) 2024.03.06
firstNotRepeatingCharacter  (0) 2024.02.27
Count Sum of Two Representations 2  (1) 2024.02.26
Kill K-th Bit  (0) 2024.02.22