01 Feb 2023

[Java] 백준 17276번: 배열 돌리기

17276

풀이 방법

배열 돌리기 문제이다.

왼쪽 대각선 -> 중앙 세로선

중앙 세로선 -> 오른쪽 대각선

오른쪽 대각선 -> 중앙 가로선

중앙 가로선 -> 왼쪽 대각선으로 바꾸면 되는 문제다.

풀이 코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;

public class BOJ_17276_배열돌리기 {
	static int[][] array;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		
		for (int tc = 0; tc < T; tc++) {
			StringBuilder sb = new StringBuilder();
			StringTokenizer st = new StringTokenizer(br.readLine());
			int size = Integer.parseInt(st.nextToken());
			int rad = Integer.parseInt(st.nextToken()) / 45;
			
			rad = (rad+8) % 8;
			array = new int[size][size];
			
			for (int i = 0; i < size; i++) {
				st = new StringTokenizer(br.readLine());
				for (int j = 0; j < size; j++) {
					array[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
			for (int i = 0; i < rad; i++) {
				rotate(array, size/2);
			}
			
			for (int i = 0; i < array.length; i++) {
				for (int j = 0; j < array.length; j++) {
					sb.append(array[i][j]+" ");
				}
				sb.append("\n");
			}
			System.out.print(sb);
		}

	}

	private static void rotate(int[][] arr, int mid) {
		int[][] tmpArr = new int[arr.length][arr.length];
		
		for (int i = 0; i < tmpArr.length; i++) {
			for (int j = 0; j < tmpArr.length; j++) {
				
				if(i == j) tmpArr[i][j] = arr[mid][j];
				else if(i == mid) tmpArr[i][j] = arr[arr.length-1-j][j];
				else if(j == mid) tmpArr[i][j] = arr[i][i];
				else if(i+j == arr.length-1) tmpArr[i][j] = arr[i][mid];
				else tmpArr[i][j] = arr[i][j];
				
			}
			
		}
		for (int i = 0; i < arr.length; i++) {
			System.arraycopy(tmpArr[i], 0, arr[i], 0, arr.length);
		}
	}

}
Thank You For Reading
SeungJun Jeon

점점 강해지고 있습니다.

comments powered by Disqus