이 문제는 그냥 빡구현이다. 처음에 index를 잘못 설정해줘서 좀 애먹었지만 잘 구현하면 된다.
import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;
import java.util.List;
public class Main{
public static int[][] map;
public static int[][] tmpMap;
public static int n = 0;
public static int m = 0;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
int count = Integer.parseInt(st.nextToken());
map = new int[n][m];
for(int i=0;i<map.length;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<map[i].length;j++){
map[i][j] = Integer.parseInt(st.nextToken());
}
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<count;i++){
func(Integer.parseInt(st.nextToken()));
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<map.length;i++){
for(int j=0;j<map[i].length;j++){
sb.append(map[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
public static void func(int k){
if(k == 1){
tmpMap = new int[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
tmpMap[n-i-1][j] = map[i][j]; //행만 서로 반대
}
}
map = tmpMap;
} else if(k == 2){
tmpMap = new int[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
tmpMap[i][m-j-1] = map[i][j]; //열만 반대
}
}
map = tmpMap;
} else if(k == 3){
tmpMap = new int[m][n];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
//System.out.println("i, j : " + i + ", " + j);
//System.out.println(j + ", " + (n-i-1));
tmpMap[j][n-i-1] = map[i][j];
}
}
//배열 바꾸기 => 결과 배열 크기 다르므로
int tmp = n;
n = m;
m= tmp;
map = tmpMap;
} else if(k == 4){
//4번 연산 : 왼쪽 90도 회전
tmpMap = new int[m][n];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
tmpMap[m-j-1][i] = map[i][j];
}
}
//배열 바꾸기
int tmp = n;
n = m;
m= tmp;
map = tmpMap;
} else if(k == 5){
tmpMap = new int[n][m];
for(int i=0; i<n/2; i++){
for(int j=0; j<m/2; j++){
tmpMap[i][m/2+j] = map[i][j];
}
}
// 0,4 -> 3,4
for(int i=0; i<n/2; i++){
for(int j=m/2; j<m; j++){
tmpMap[n/2+i][j] = map[i][j];
}
}
// 3,4 -> 3,0
for(int i=n/2; i<n; i++){
for(int j=m/2; j<m; j++){
tmpMap[i][j-m/2] = map[i][j];
}
}
// 3,0 -> 0,0
for(int i=n/2; i<n; i++){
for(int j=0; j<m/2; j++){
tmpMap[i-n/2][j] = map[i][j];
}
}
map = tmpMap;
} else if(k == 6){
tmpMap = new int[n][m];
// 0,0 -> 3,0
for(int i=0; i<n/2; i++){
for(int j=0; j<m/2; j++){
tmpMap[n/2+i][j] = map[i][j];
}
}
// 3,0 -> 3,4
for(int i=n/2; i<n; i++){
for(int j=0; j<m/2; j++){
tmpMap[i][j+m/2] = map[i][j];
}
}
// 3,4 -> 0,4
for(int i=n/2; i<n; i++){
for(int j=m/2; j<m; j++){
tmpMap[i-n/2][j] = map[i][j];
}
}
// 0,4 -> 0,0
for(int i=0; i<n/2; i++){
for(int j=m/2; j<m; j++){
tmpMap[i][j-m/2] = map[i][j];
}
}
map = tmpMap;
}
}
}