백준 Siver1 16935 - 배열 돌리기3

JH·2022년 10월 13일
0

백준 알고리즘

목록 보기
24/29
post-thumbnail

요즘 인턴 일을 하는데 하나가 자꾸 발목을 잡아서 해결하느라 아무것도 못하고 있다. 진도는 안나가고 문제는 해결해야하고 답답해 죽겠다

문제


입력

출력

예제



idea

이 문제는 단순히 구현 문제이다. 그냥 구현을 여러개를 해야해서 힘들었다.

Code

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);
	}	
}

결과

0개의 댓글