알고리즘을 풀다가 2차원 배열 회전이 나왔는데 까먹지 않기 위해 기록을 해보겠다!
그림은 시계방향(90도)으로 회전하는 것을 그려보았다.
노란 부분을 보자
arr2[0][0] = arr1[2][0]
arr2[0][1] = arr1[1][0]
arr2[0][2] = arr1[0][0]
arr1 배열의 열 값이 arr2 배열의 행 값으로 들어가고
arr2 배열의 행 값은 arr2 배열의 열 값에 반대로 들어가는 것을 볼 수 있다.
이 규칙을 식으로 만들어보면 요로코롬(●'◡'●)
arr2[i][j] = arr1[n-1-j][i];
자바 코드로 구현해보자!!
int n = 3; //행의 길이
int m = 4; //열의 길이
int num = 1;
int[][] arr1 = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr1[i][j] = num++;
}
}
int[][] arr2 = new int[m][n]; // 행, 열을 반대로
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr2[i][j] = arr1[n - 1 - j][i]; // ##핵심 코드##
}
}
출력해서 결과를 보면
--arr1--
1 2 3 4
5 6 7 8
9 10 11 12
--arr2--
9 5 1
10 6 2
11 7 3
12 8 4
시계방향으로 회전이 되었다!!
하는 김에 반시계 방향도 해보자
arr2[i][j] = arr1[j][m-1-i];
코드
int n = 3;
int m = 4;
int[][] arr1 = new int[n][m];
int num = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr1[i][j] = num++;
}
}
int[][] arr2 = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr2[i][j] = arr1[j][m - 1 - i]; // ##핵심 코드##
}
}
결과
--arr1--
1 2 3 4
5 6 7 8
9 10 11 12
--arr2--
4 8 12
3 7 11
2 6 10
1 5 9