0. 단순한 구현 문제
1. 4개의 대각선을 옮기는 작업을 한다
- 두 수를 swap하듯, 하나를 백업하고 후에 복구
2. -X 각도로의 회전은 360-X 각도의 회전과 같다
- 별도의 함수를 만들지 않고, 45도 회전 함수를 동일하게 사용
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
static int[][] map;
static int n,d;
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int tc = pint(br.readLine());
for (int test = 1; test <= tc; test++) {
StringTokenizer st = new StringTokenizer(br.readLine());
n = pint(st.nextToken());
d = pint(st.nextToken())/45;
if(d<0)d+=8;
map=new int[n][n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
map[i][j]=pint(st.nextToken());
}
}
for (int i = 0; i < d; i++) {
spin();
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sb.append(map[i][j]).append(" ");
}sb.append("\n");
}
}System.out.println(sb);
}
static void spin() {
int[] backup = new int[n];
for (int i = 0; i < n; i++)backup[i]=map[i][i];//백업
for (int i = 0; i < n; i++)map[i][i]=map[n/2][i];
for (int i = 0; i < n; i++)map[n/2][i]=map[n-i-1][i];
for (int i = 0; i < n; i++)map[n-i-1][i]=map[n-i-1][n/2];
for (int i = 0; i < n; i++)map[i][n/2]=backup[i];
}
static int pint(String s) {
return Integer.parseInt(s);
}
}
'알고리즘 문제 풀이 > BOJ 실버' 카테고리의 다른 글
[백준] 9934 - 완전 이진 트리 (0) | 2021.12.22 |
---|---|
[백준] 14496 - 그대, 그머가 되어 (0) | 2021.11.14 |
[백준] 2346 - 풍선 터뜨리기 (0) | 2021.10.25 |
[백준] 1325 - 효율적인 해킹 (0) | 2021.09.25 |
[백준] 5567 - 결혼식 (0) | 2021.08.08 |
[백준] 14241 - 슬라임 합치기 (0) | 2021.07.07 |
[백준] 1697 - 숨바꼭질 (0) | 2021.05.29 |