[Java] 2차원 배열 회전

Ran·2021년 6월 24일
2

알고리즘을 풀다가 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

profile
Back-End Developer

0개의 댓글