내가 제출한 답:
import java.util.Scanner;
public class Main {
public static final int MAX_SIZE = 100;
// 동 남 서 북
public static int[] dx = new int[] {0, 1, 0, -1};
public static int[] dy = new int[] {1, 0 ,-1 , 0};
public static int[][] arr = new int[MAX_SIZE][MAX_SIZE];
public static int moveDir = 1;
public static int x = 0;
public static int y = 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);
}
public static void changeDir() {
if(moveDir == 0){
moveDir = 3;
}else if(moveDir == 1) {
moveDir = 0;
} else if (moveDir == 2) {
moveDir = 1;
} else if(moveDir == 3) {
moveDir = 2;
}
}
public static void move(int moveDir) {
x += dx[moveDir];
y += dy[moveDir];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int count = n * m ;
int i = 1;
while(i <= count){
arr[x][y] = i;
int nextX = x + dx[moveDir];
int nextY = y + dy[moveDir];
if (!inRange(nextX, nextY, n, m)) {
changeDir();
}
move(moveDir);
i++;
}
for(int j = 0; j < n; j++){
for(int k = 0; k < m; k++) {
System.out.printf("%d ", arr[j][k]);
}
System.out.println();
}
}
}
changeDir함수를 정리해서 예쁘게 다듬어도 괜찮을듯 싶다.
반시계 방향으로 돌리는 식은
( moveDir + 3 ) % 4 하면 반시계 방향으로 돌린 방향이 나온다.
728x90
반응형
'Algorithm > 자료 구조 및 개념 정리' 카테고리의 다른 글
달팽이 순회2 (0) | 2023.06.10 |
---|---|
격자 탐색 템플릿 (0) | 2023.05.20 |
시계 / 반시계 방향 회전 템플릿 (2) | 2023.05.17 |
이진트리 순회 (0) | 2022.09.06 |
Array와 LinkedList의 차이 (0) | 2022.07.10 |