import java.util.Scanner;
public class Main {
public static final int MAX_VAL = 100;
// 동 남 서 북
public static int[] dx = new int[]{0, 1, 0, -1};
public static int[] dy = new int[]{1, 0, -1, 0};
public static char[][] arr = new char[MAX_VAL][MAX_VAL];
public static int moveDirection = 0;
public static boolean inRange(int x, int y, int n, int m) {
return (0 <= x && x < n && 0 <= y && y < m) && (arr[x][y] == 0);
}
// 시계 방향으로 return
public static void changeDir() {
moveDirection = (moveDirection + 1) % 4;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
char a = 'A';
int x = 0;
int y = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
while (true) {
int nx = x + dx[moveDirection];
int ny = y + dy[moveDirection];
if (i == n - 1 && j == m - 1) {
arr[x][y] = a;
break;
}
// inRange안에 들어가지 않는다면
if (!inRange(nx, ny, n, m)) {
changeDir();
} else {
arr[x][y] = a;
if ( a >= 'Z') {
a = 'A';
} else {
a++;
}
x = nx;
y = ny;
break;
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] != 0) {
System.out.print(arr[i][j] + " ");
}
}
System.out.println();
}
}
}
알고리즘 너무 재미있당 ㅎㅅㅎ
728x90
반응형
'Algorithm > 자료 구조 및 개념 정리' 카테고리의 다른 글
달팽이 순회 (0) | 2023.06.05 |
---|---|
격자 탐색 템플릿 (0) | 2023.05.20 |
시계 / 반시계 방향 회전 템플릿 (2) | 2023.05.17 |
이진트리 순회 (0) | 2022.09.06 |
Array와 LinkedList의 차이 (0) | 2022.07.10 |