알고리즘/백준

16935_배열 돌리기 3

베리영young 2024. 12. 28. 22:19

사용 알고리즘: 구현

사용 언어: java 

 

package week30;

import java.util.*;
public class Main_bj_17470_배열돌리기5 {
	static int n,m,r, map[][], query[], nxtMap[][];

	public static void main(String[] args) {
		init_배열돌리기5();
		
		for (int q = 0; q < r; q++) {
			nxtMap = new int[map.length][map[0].length];
			if(query[q] == 1) {
				for (int i = 0; i < map.length; i++) {
					for (int j = 0; j < map[0].length; j++) {
						nxtMap[map.length-1-i][j] = map[i][j];
					}
				}
			} else if(query[q] == 2) {
				for (int i = 0; i < map.length; i++) {
					for (int j = 0; j < map[0].length; j++) {
						nxtMap[i][map[0].length-1-j] = map[i][j];
					}
				}
			} else if(query[q] == 3) {
				nxtMap = new int[map[0].length][map.length];
				for (int j = 0; j < map[0].length; j++) {
					for (int i = 0; i < map.length; i++) {
						nxtMap[j][map.length-1-i] = map[i][j];
					}
				}
			} else if(query[q] == 4) {
				nxtMap = new int[map[0].length][map.length];
				for (int j = 0; j < map[0].length; j++) {
					for (int i = 0; i < map.length; i++) {
						nxtMap[map[0].length-1-j][i] = map[i][j];
					}
				}
			} else if(query[q] == 5) {
				int[][][] quaters = makeQuaters(map.length,map[0].length);
				query5(quaters, map.length,map[0].length);
			} else {
				int[][][] quaters = makeQuaters(map.length,map[0].length);
				query6(quaters, map.length,map[0].length);
			}
			map = nxtMap;
		}
		
		//
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[0].length; j++) {
				System.out.print(map[i][j]+" ");
			}
			System.out.println();
		}
	}

	private static void query5(int[][][] quaters, int n, int m) {
		//1->2
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i][j+m/2] = quaters[1][i][j];
			}
		}
		//2->3
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i+n/2][j+m/2] = quaters[2][i][j];
			}
		}
		//3->4
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i+n/2][j] = quaters[3][i][j];
			}
		}
		//4->1
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i][j] = quaters[4][i][j];
			}
		}
	}

	private static void query6(int[][][] quaters, int n, int m) {
		//1->4
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i+n/2][j] = quaters[1][i][j];
			}
		}
		//4->3
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i+n/2][j+m/2] = quaters[4][i][j];
			}
		}
		//3->2
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i][j+m/2] = quaters[3][i][j];
			}
		}
		//2->1
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				nxtMap[i][j] = quaters[2][i][j];
			}
		}
	}

	private static int[][][] makeQuaters(int n, int m) {
		int[][][] quater = new int[5][][];
		int[][] q1 = new int[n/2][m/2];
		for (int i = 0; i < n/2; i++) {
			for (int j = 0; j < m/2; j++) {
				q1[i][j] = map[i][j];
			}
		}
		quater[1] = q1;
		
		q1 = new int[n/2][m/2];
		for (int i = 0; i < n/2; i++) {
			for (int j = m/2; j < m; j++) {
				q1[i][j-m/2] = map[i][j];
			}
		}
		quater[2] = q1;
		
		q1 = new int[n/2][m/2];
		for (int i = n/2; i < n; i++) {
			for (int j = m/2; j < m; j++) {
				q1[i-n/2][j-m/2] = map[i][j];
			}
		}
		quater[3] = q1;
		
		q1 = new int[n/2][m/2];
		for (int i = n/2; i < n; i++) {
			for (int j = 0; j < m/2; j++) {
				q1[i-n/2][j] = map[i][j];
			}
		}
		quater[4] = q1;
		return quater;
	}

	private static void init_배열돌리기5() {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		r = sc.nextInt();
		map = new int[n][m];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				map[i][j] = sc.nextInt();
			}
		}
		
		query = new int[r];
		for (int i = 0; i < r; i++) {
			query[i] = sc.nextInt();
		}
	}

}

 

배열 돌리기 5 풀다가 겸사겸사..