[Silver II] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ - 17276
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 219524 KB, ์๊ฐ: 6124 ms
๋ถ๋ฅ
๊ตฌํ
๋ฌธ์ ์ค๋ช
ํฌ๊ธฐ๊ฐ n x n์ธ 2์ฐจ์ ์ ์ ๋ฐฐ์ด X๊ฐ ์๋ค. (n์ ํ์)
X๋ฅผ 45° ์ ๋ฐฐ์๋งํผ ์๊ณ๋ฐฉํฅ ํน์ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ ค๊ณ ํ๋ค. X๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก 45° ๋๋ฆฌ๋ฉด ์๋์ ๊ฐ์ ์ฐ์ฐ์ด ๋์์ X์ ์ ์ฉ๋์ด์ผ ํ๋ค:
- X์ ์ฃผ ๋๊ฐ์ ์ ((1,1), (2,2), …, (n, n)) ๊ฐ์ด๋ฐ ์ด ((n+1)/2 ๋ฒ์งธ ์ด)๋ก ์ฎ๊ธด๋ค.
- X์ ๊ฐ์ด๋ฐ ์ด์ X์ ๋ถ ๋๊ฐ์ ์ผ๋ก ((n, 1), (n-1, 2), …, (1, n)) ์ฎ๊ธด๋ค.
- X์ ๋ถ ๋๊ฐ์ ์ X์ ๊ฐ์ด๋ฐ ํ ((n+1)/2๋ฒ์งธ ํ)์ผ๋ก ์ฎ๊ธด๋ค.
- X์ ๊ฐ์ด๋ฐ ํ์ X์ ์ฃผ ๋๊ฐ์ ์ผ๋ก ์ฎ๊ธด๋ค.
- ์ ๋ค ๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋ ์์์ ๊ธฐ์กด ์์๋ ์ ์ง ๋์ด์ผ ํ๋ค.
- X์ ๋ค๋ฅธ ์์์ ์์น๋ ๋ณํ์ง ์๋๋ค.
๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 45° ๋๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์์ ๋น์ทํ๊ฒ ์ ์๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๊ทธ๋ฆผ ์ค์์ 5x5 ๋ฐฐ์ด X๊ฐ ์๊ณ , ์ด ๋ฐฐ์ด์ ์๊ณ๋ฐฉํฅ ํน์ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก 45° ๋๋ ธ์ ๋์ ๊ฒฐ๊ณผ๊ฐ ์ฐ์ธก ๊ทธ๋ฆฌ๊ณ ์ข์ธก์ ์๋ค. ๊ตต์ ์์๋ ์ฃผ ๋๊ฐ์ / ์ค๊ฐ ์ด / ๋ถ ๋๊ฐ์ / ์ค๊ฐ ํ์ ์์นํ ์์์ด๋ค.
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
X๋ฅผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 45° ํ์ ํ ๊ฒฝ์ฐ | ๋ฐฐ์ด X (5x5) | X๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก 45° ํ์ ํ ๊ฒฝ์ฐ |
์ ๋ ฅ์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด X์ ์ด๋ ๋ฐฉํฅ์ผ๋ก ๋ช ๋ ํ์ ํ ์ง ์ ๋ ฅ ๋ฐ์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์ T๊ฐ ์ฃผ์ด์ง๋ค (1 ≤ T ≤ 10).
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด: ์ฒซ ์ค์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ n (1 ≤ n < 500, n์ ํ์) ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ d๊ฐ ์ฃผ์ด์ง๋ค. d๋ 0 ≤ |d| ≤ 360 ์ ๋ง์กฑํ๋ฉฐ |d| ๋ 45์ ๋ฐฐ์์ด๋ค. d๊ฐ ์์์ด๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก d° ๋๋ ค์ผ ํ๊ณ , ์์์ด๋ฉด ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก |d|° ๋๋ ค์ผ ํ๋ค. ๋ค์ n์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ n๊ฐ์ ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค (X์ ์์๋ค์ ๋ํ๋ธ๋ค). ๊ฐ ๊ฐ์ 1 ์ด์ 1,000,000 ์ดํ์ ์ ์์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ ์ฐ์ฐ์ ๋ง์น ํ ๋ฐฐ์ด์ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค. n์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ n๊ฐ์ ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค.
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));
int t = Integer.parseInt(br.readLine()); // ํ
์คํธ์ผ์ด์ค ๊ฐ์
for (int i = 0; i < t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // n x n ๋ฐฐ์ด์ ํฌ๊ธฐ
int d = Integer.parseInt(st.nextToken()); // ํ์
if (d < 0) // ์์์ผ ๋ + 360 ํ๋ฉด ์๊ณ๋ฐฉํฅ ํ์ ๊ณผ ๊ฐ์์ง
d += 360;
int[][] arr = new int[n][n]; // ํ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฐฐ์ด
int[][] save = new int[n][n]; // ์์๋ก arr[][]์ ์์๋ฅผ ์ ์ฅํด๋ ๋ฐฐ์ด
for (int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine());
for (int k = 0; k < n; k++) {
arr[j][k] = Integer.parseInt(st.nextToken());
save[j][k] = arr[j][k];
}
}
while (d >= 45) {
for (int j = 0; j < n; j++) {
save[j][n / 2] = arr[j][j];
save[j][j] = arr[n / 2][j];
save[n / 2][j] = arr[n - j - 1][j];
save[n - j - 1][j] = arr[n - j - 1][n / 2];
}
for (int j = 0; j < n; j++) {
System.arraycopy(save[j], 0, arr[j], 0, n); // save[][]๋ฅผ arr[][]์ ๋ณต์ฌ
}
d -= 45; // 45๋ ํ์ ํ์ผ๋ ๋นผ์ฃผ๊ธฐ
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
System.out.print(arr[j][k] + " ");
}
System.out.print("\n");
}
}
}
}
/* ์๊ฐ์ด๊ณผ ๋ฌ์.. BufferedReader๋ฅผ ์ฐ์..
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(); // ํ
์คํธ์ผ์ด์ค ๊ฐ์
for (int i = 0; i < t; i++) {
int n = sc.nextInt(); // n x n ๋ฐฐ์ด์ ํฌ๊ธฐ
int d = sc.nextInt(); // ํ์
if (d < 0) // ์์์ผ ๋ + 360 ํ๋ฉด ์๊ณ๋ฐฉํฅ ํ์ ๊ณผ ๊ฐ์์ง
d += 360;
int[][] arr = new int[n][n]; // ํ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฐฐ์ด
int[][] save = new int[n][n]; // ์์๋ก arr[][]์ ์์๋ฅผ ์ ์ฅํด๋ ๋ฐฐ์ด
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
arr[j][k] = sc.nextInt();
save[j][k] = arr[j][k];
}
}
while (d >= 45) {
for (int j = 0; j < n; j++) {
save[j][n / 2] = arr[j][j];
save[j][j] = arr[n / 2][j];
save[n / 2][j] = arr[n - j - 1][j];
save[n - j - 1][j] = arr[n - j - 1][n / 2];
}
for (int j = 0; j < n; j++) {
System.arraycopy(save[j], 0, arr[j], 0, n); // save[][]๋ฅผ arr[][]์ ๋ณต์ฌ
}
d -= 45; // 45๋ ํ์ ํ์ผ๋ ๋นผ์ฃผ๊ธฐ
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
System.out.print(arr[j][k] + " ");
}
System.out.print("\n");
}
}
}
}
*/