알고리즘/백준
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 풀다가 겸사겸사..