요즘 인턴 일을 하는데 하나가 자꾸 발목을 잡아서 해결하느라 아무것도 못하고 있다. 진도는 안나가고 문제는 해결해야하고 답답해 죽겠다
이 문제는 단순히 구현 문제이다. 그냥 구현을 여러개를 해야해서 힘들었다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
int array[][] = new int[N][M];
int copy[][] = new int[N][M];
int temp;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
array[i][j] = Integer.parseInt(st.nextToken());
}
}
int x[]=new int[num+1];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
x[i] = Integer.parseInt(st.nextToken());
}
for (int i=0;i<num;i++) {
switch (x[i]) {
case 1:
copy(array, copy, N, M);
case_1(array, copy, N, M);
break;
case 2:
copy(array, copy, N, M);
case_2(array, copy, N, M);
break;
case 3:
copy(array, copy, N, M);
array = new int[M][N];
case_3(array, copy, N, M);
copy = new int[M][N];
temp = N;
N = M;
M = temp;
x[num]++;
break;
case 4:
copy(array, copy, N, M);
array = new int[M][N];
case_4(array, copy, N, M);
copy = new int[M][N];
temp = N;
N = M;
M = temp;
x[num]++;
break;
case 5:
case_5(array, copy, N, M);
break;
case 6:
case_6(array, copy, N, M);
break;
}
}
print(array, N, M);
}
public static void case_1(int array[][], int copy[][], int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
array[N - 1 - i][j] = copy[i][j];
}
}
}
public static void case_2(int array[][], int copy[][], int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
array[i][M - 1 - j] = copy[i][j];
}
}
}
public static void case_3(int array[][], int copy[][], int N, int M) {
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
array[i][j] = copy[N - j - 1][i];
}
}
}
public static void case_4(int array[][], int copy[][], int N, int M) {
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
array[i][j] = copy[j][M - i - 1];
}
}
}
public static void case_5(int array[][], int copy[][], int N, int M) {
int part_1[][] = new int[N / 2][M / 2];
int part_2[][] = new int[N / 2][M / 2];
int part_3[][] = new int[N / 2][M / 2];
int part_4[][] = new int[N / 2][M / 2];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((i < N / 2) && (j < M / 2)) {
part_1[i][j] = array[i][j];
} else if ((i >= N / 2) && (j < M / 2)) {
part_4[i - (N / 2)][j] = array[i][j];
} else if ((i < N / 2) && (j >= (M / 2))) {
part_2[i][j - (M / 2)] = array[i][j];
} else
part_3[i - (N / 2)][j - (M / 2)] = array[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (i < N / 2 && j < M / 2) {
array[i][j] = part_4[i][j];
} else if (i >= N / 2 && j < M / 2) {
array[i][j] = part_3[i - (N / 2)][j];
} else if (i < N / 2 && j >= M / 2) {
array[i][j] = part_1[i][j - (M / 2)];
} else
array[i][j] = part_2[i - (N / 2)][j - (M / 2)];
}
}
}
public static void case_6(int array[][], int copy[][], int N, int M) {
int part_1[][] = new int[N / 2][M / 2];
int part_2[][] = new int[N / 2][M / 2];
int part_3[][] = new int[N / 2][M / 2];
int part_4[][] = new int[N / 2][M / 2];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((i < N / 2) && (j < M / 2)) {
part_1[i][j] = array[i][j];
} else if ((i >= N / 2) && (j < M / 2)) {
part_4[i - (N / 2)][j] = array[i][j];
} else if ((i < N / 2) && (j >= (M / 2))) {
part_2[i][j - (M / 2)] = array[i][j];
} else
part_3[i - (N / 2)][j - (M / 2)] = array[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (i < N / 2 && j < M / 2) {
array[i][j] = part_2[i][j];
} else if (i >= N / 2 && j < M / 2) {
array[i][j] = part_1[i - (N / 2)][j];
} else if (i < N / 2 && j >= M / 2) {
array[i][j] = part_3[i][j - (M / 2)];
} else
array[i][j] = part_4[i - (N / 2)][j - (M / 2)];
}
}
}
public static void copy(int array[][], int copy[][], int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
copy[i][j] = array[i][j];
}
}
}
public static void print(int array[][], int N, int M) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
sb.append(array[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}