simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 참조타입
  • 자바프로그래밍
  • 참조변수
  • 자바프로그램
  • controllerTest
  • scanner #next() #nextLine()
  • 자바
  • 404
  • 자바메모리구조
  • null
  • 스프링
  • 컨트롤러
  • JVM메모리구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[자바_예제] 2차원 배열 예제_여러 방향으로 뒤집기
Language/Java

[자바_예제] 2차원 배열 예제_여러 방향으로 뒤집기

2022. 3. 22. 21:51

[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
    'Language/Java' 카테고리의 다른 글
    • [자바_복습] 이클립스에서 템플릿 만들기
    • [자바_문법] Wrapper 클래스 이해
    • [자바의 정석_예제] 연산자
    • [자바의 정석_예제] 변수
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바