Java Study 배열 180도 돌리기 / 배열좌우바꾸기
2023/4월12일수
Main
package mymain;
import myutil.MyArrayChange;
import myutil.MyArrays2;
public class MyMain_배열22222_변환 {
public static void main(String[] args) {
int [][] src =new int[5][5];
MyArrays2.set(src);
System.out.println("---[원본]---");
MyArrays2.display_array(src);
//오른쪽 90도 회전시키기
int [][] dest = MyArrayChange.rotate_right_90(src);
System.out.println("---[Rotage Right 90]---");
MyArrays2.display_array(dest);
//좌우 뒤집기
dest = MyArrayChange.flip_left_right(src);
System.out.println("---[Flip Left-Right]---");
MyArrays2.display_array(dest);
//180도 회전시키기
dest = MyArrayChange.rotate_180(src);
System.out.println("---[Rotate 180]---");
MyArrays2.display_array(dest);
}
}
Util
package myutil;
public class MyArrayChange {
//오른쪽 90도 회전시키기
public static int[][] rotate_right_90(int [][] src) {
rotate_right_90 메소드는 2차원 정수형 배열 src를 오른쪽으로 90도 회전시키는 메소드이다
int rows =src.length;//행수
int cols =src[0].length;//열의갯수
src 배열의 행 수와 열의 갯수글 rows 와 cols 변수에 저장
//원본배열과 동일하 크기의 사본배열을 생성
int [][] dest= new int[rows][cols];
src 와 동일한 크기의 사본 배열 dest 를 생성 하고 dest 배열의 행 수는 src 배열의 열수와 같고 열의 수는 src 배열의 행 수와 같다 이렇게 하는 이유는 src 배열을 오른쪽으로 90도 회전시키면 행과 열이 바뀌기 떄문이다
//원본배열->사본배열로 옮기기
for(int i=0; i<rows;i++) {//행점자
for(int k=0; k<cols; k++) {//열첨자
dest[i][k]= src[i][k];
}
}
먼저 for문에서 i 는 현재 처리 할 행의 인덱스를 나타냅니다 k는 현재 처리 할 열의 인덱스
dest[i][cols -k -1] = src[i][k] 구문은 현재 src 배열의 i 번쨰 행 k 번쨰 열의 값을,새로운 dest 배열에서 몇번째 행과
열에 넣을지 계산
오른쪽 90도 회전에서는 원래 배열의 마지막 열이 새로운 배열의 첮번째 항 두번째열이 두번째 형 이 된다
따라서 cols-k-1을 통해현재 열의 위치를 역순으로 바꾸어 새로운 배열에서 해당위치에 값을 할당
return dest;
}
//좌우뒤집기
public static int[][] flip_left_right(int[][] src) {
flip_left_right 메소드는 2차원 정수형 배열 src를 좌우로 바꾸기 메소드이다
int rows = src.length; // 행 수
int cols = src[0].length; // 열의 갯수
src 배열의 행 수와 열의 갯수글 rows 와 cols 변수에 저장
// 원본 배열과 동일 크기의 사본 배열을 생성
int[][] dest = new int[rows][cols];
// 원본 배열 -> 사본 배열로 옮기기
for (int i = 0; i < rows; i++) { // 행 점자
for (int k = 0; k < cols; k++) { // 열 점자
dest[i][cols -k - 1] = src[i][k];
}
}
return dest;
}
//가로 세로
//컬럼 로우
//180도 돌리기
public static int[][] rotate_180(int[][] src) {
rotate_180 메소드는 2차원 정수형 배열 src를 180도 뒤집기 메소드이다
int rows = src.length; // 행 수
int cols = src[0].length; // 열의 갯수
src 배열의 행 수와 열의 갯수글 rows 와 cols 변수에 저장
// 원본 배열과 동일 크기의 사본 배열을 생성
int[][] dest = new int[rows][cols];
// 원본 배열 -> 사본 배열로 옮기기
for (int i = 0; i < rows; i++) { // 행 점자
for (int k = 0; k < cols; k++) { // 열 점자
dest[rows - i - 1][cols - k - 1] = src[i][k];
}
}
return dest;
}
}