[2차원 배열 예제_ 여러 방향으로 뒤집기]
1. 90도 회전하기
[원리] *표시한 노란색 기준 - 왼쪽의 열이 오른쪽 행로 바뀌었다. (반대로는, 오른쪽 행은 왼쪽의 열이다) - 왼쪽의 열은 0~4순번이며, 오른쪽 행도 0~4순번이다. (반대로도 동일) - 왼쪽의 행은 0으로 고정되었고, 오른쪽 열은 4로 고정되어 있다. |
[90도 회전 코드]
package myutil;
public class MultiArray {
public static int[][] rotate90(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] rotatedArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
rotatedArr[i][j] = arr[(row-1)-j][i];
}
}
return rotatedArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.rotate90(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
21 16 11 6 1
22 17 12 7 2
23 18 13 8 3
24 19 14 9 4
25 20 15 10 5
2. 좌우 바꾸기
[원리] *표시한 색 기준 - 왼쪽의 열의 0번째가 오른쪽 열의 4번째가 되었다. - 왼쪽의 열의 4번째가 오른쪽 열의 0번째가 되었다. |
[좌우 바꾸기 코드]
package myutil;
public class MultiArray {
public static int[][] flip_leftRight(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] flipedArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
flipedArr[i][j] = arr[i][(col-1)-j];
}
}
return flipedArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.flip_leftRight(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
5 4 3 2 1
10 9 8 7 6
15 14 13 12 11
20 19 18 17 16
25 24 23 22 21
3. 위아래 바꾸기
[원리] *표시한 노란색 기준 - 왼쪽 행의 0번째가 오른쪽 행의 4번째 - 왼쪽 행의 4번째가 오른쪽 행의 0번째 |
[위아래 바꾸기 코드]
package myutil;
public class MultiArray {
public static int[][] flip_upDown(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] flipedArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
flipedArr[i][j] = arr[(row-1)-i][j];
}
}
return flipedArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.flip_upDown(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
21 22 23 24 25
16 17 18 19 20
11 12 13 14 15
6 7 8 9 10
1 2 3 4 5
4. 대각선(좌->우) 접기
[원리] *표시한 노란색 기준 - 왼쪽의 행이 오른쪽 열로 바뀌었다. - 왼쪽의 행은 0~4순번이며, 오른쪽 열도 0~4순번이다. |
[대각선(좌->우) 코드]
package myutil;
public class MultiArray {
public static int[][] diagonal1(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] diagonalArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
diagonalArr[i][j] = arr[j][i];
}
}
return diagonalArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.diagonal1(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
5. 대각선(우->좌) 접기
[원리] *표시한 노란색 기준 - 왼쪽의 행이 오른쪽 열로 바뀌었다. - 왼쪽 행의 0번째가 오른쪽 열의 4번째가 되었다. - 왼쪽 열은 0~4순번으로 간다. 오른쪽 행은 4~0순번이다. |
[대각선(우->좌) 코드]
package myutil;
public class MultiArray {
public static int[][] diagonal2(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] diagonalArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
diagonalArr[i][j] = arr[(row-1)-j][(col-1)-i];
}
}
return diagonalArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.diagonal2(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
25 20 15 10 5
24 19 14 9 4
23 18 13 8 3
22 17 12 7 2
21 16 11 6 1
6. 더블 크로스
[원리] *표시한 색 기준 - 왼쪽의 0행은 오른쪽에서 4행 - 왼쪽의 0열은 오른쪽에서 4열 |
[더블 크로스 코드]
package myutil;
public class MultiArray {
public static int[][] doubleCross(int[][] arr){
int row = arr.length, col = arr[0].length;
int[][] xArr = new int[row][col];
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
xArr[i][j] = arr[(row-1)-i][(col-1)-j];
}
}
return xArr;
}
}
[출력 코드]
package mymain;
import myutil.MultiArray;
public class MultiArrayTest {
public static void main(String[] args) {
int[][] arr = new int[5][5];
int n = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++) {
arr[i][j] = n++;
}
}
int[][] rotatedArr = MultiArray.doubleCross(arr);
n = 1;
for(int i = 0; i < rotatedArr.length; i++) {
for(int j = 0; j < rotatedArr[0].length; j++) {
System.out.printf("%4d",rotatedArr[i][j]);
}
System.out.println();
}
}
}
>> 결과
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10 9 8 7 6
5 4 3 2 1
'Language > Java' 카테고리의 다른 글
[자바_복습] 이클립스에서 템플릿 만들기 (0) | 2022.03.24 |
---|---|
[자바_문법] Wrapper 클래스 이해 (0) | 2022.03.23 |
[자바의 정석_예제] 연산자 (0) | 2022.03.21 |
[자바의 정석_예제] 변수 (0) | 2022.03.21 |
[자바의정석_예제] 배열 (0) | 2022.03.20 |