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 |