점점 강해지고 있습니다.
[Java] 백준 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