728x90
반응형
https://www.acmicpc.net/problem/1307
풀이
※ 출처 : https://destiny738.tistory.com/244?category=48883
여기 사이트에 적혀져 있는 분의 내용을 보고 소스코드를 작성하시면 됩니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] arr = n % 2 == 1 ? odd(n) : n % 4 == 0 ? fourmul(n) : even(n);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
sb.append(arr[i][j] + " ");
}
sb.append("\n");
}
System.out.print(sb);
}
public static int[][] odd(int n){
int[][] num = new int[n][n];
int x = 0, y = num.length / 2;
for(int i = 1; i <= n * n; i++) {
num[x][y] = i;
if(i % n == 0) {
x++;
}
else {
x--;
y++;
if(x < 0) {
x = n - 1;
}
if(y > n - 1) {
y = 0;
}
}
}
return num;
}
public static int[][] even(int n){
int[][] num = new int[n][n];
int[][] arr = odd(n / 2);
for(int i = 0; i < n / 2; i++) {
for(int j = 0; j < n / 2; j++) {
if(j < (n / 4)) {
num[i][j] = 3;
}
}
}
num[n / 4][0] = 0;
num[n / 4][n / 4] = 3;
for(int i = n / 2; i < n; i++) {
for(int j = 0; j < n / 2; j++) {
if(num[i - n / 2][j] == 0) {
num[i][j] = 3;
}
}
}
for(int i = 0; i < n / 2; i++) {
for(int j = n / 2; j < n; j++) {
num[i][j] = n - (n / 4 - 1) - 1 < j ? 1 : 2;
}
}
for(int i = n / 2; i < n; i++) {
for(int j = n / 2; j < n; j++) {
num[i][j] = num[i - n / 2][j] == 1 ? 2 : 1;
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
num[i][j] *= (n * n / 4);
}
}
int x = 0, y = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
num[i][j] += arr[x][y];
y++;
if(y >= n / 2) {
y = 0;
}
}
x++;
if(x >= n / 2) {
x = 0;
}
}
return num;
}
public static int[][] fourmul(int n){
int[][] num = new int[n][n];
int count = 1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
num[i][j] = count++;
}
}
int temp1 = 25 * n / 100, temp2 = 50 * n / 100;
for(int i = 0; i < temp1; i++) {
for(int j = temp1; j < temp1 + temp2; j++) {
swap(num, i, j, n);
}
}
return num;
}
public static void swap(int[][] num, int temp1, int temp2, int size) {
int temp = num[temp1][temp2];
num[temp1][temp2] = num[size - 1 - temp1][size - 1 - temp2];
num[size - 1 - temp1][size - 1 - temp2] = temp;
temp = num[temp2][temp1];
num[temp2][temp1] = num[size - 1 - temp2][size - 1 - temp1];
num[size - 1 - temp2][size - 1 - temp1] = temp;
}
}
728x90
반응형
'백준 > 1 - 5000' 카테고리의 다른 글
[백준] 1300번 : K번째 수(JAVA) (0) | 2021.10.18 |
---|---|
[백준] 2199번 : DNA 해독2(JAVA) (0) | 2021.10.14 |
[백준] 2210번 : 숫자판 점프(JAVA) (0) | 2021.09.10 |
[백준] 4396번 : 지뢰 찾기(JAVA) (0) | 2021.09.05 |
[백준] 1662번 : 압축(JAVA) (0) | 2021.08.30 |
댓글