ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ SWEA ] 1954
    Java/코딩테스트 2023. 5. 19. 18:19

    달팽이 숫자 문제

    한 방향으로 쭉 -> 가고 더이상 못가면 방향을 전환하는 방법으로 푼다.

    isValid() 함수로 검사 + 해당 칸의 값이 0인지 확인 -> 아닐 경우 방향을 전환 

    이 때 isValid로 먼저 검사해야한다. map[x+dirX[dir]][y+dirY[dir]]를 먼저 조건의 앞에 넣어두면 벽 벗어나는 칸일 경우 바로 ArrayOutOfBound 뜨기 때문. 

    각 칸에는 1~n*n의 숫자를 채워넣기. 

     

     

     

    import java.util.*;
    public class Solution {
        static int[] dirX = { 0, 1, 0, -1 };
        static int[] dirY = { 1, 0, -1, 0 };
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int test = sc.nextInt();
            for (int t = 1; t <= test; t++) {
                int n = sc.nextInt();
                int[][] map = new int[n][n];
    
                int x = 0;
                int y = 0;
                int dir = 0;
                for (int i = 1 ; i <= n*n; i++) {
                    map[x][y] = i;
                    if (!isValid(x + dirX[dir], n) || !isValid(y + dirY[dir], n) || map[x + dirX[dir]][y + dirY[dir]] != 0 ) {
                        dir = (dir + 1) % 4;
                    }
                    x = x + dirX[dir];
                    y = y + dirY[dir];
                }
    
                System.out.println("#" + t);
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < n; j++) {
                        System.out.print(map[i][j] + " ");
                    }
                    System.out.println("");
                }
            }
        }
    
        public static boolean isValid(int pos, int n) {
            if (pos >= n || pos < 0 ) {
                return false;
            }
            return true;
        }
    
    }

     

     

     

    'Java > 코딩테스트' 카테고리의 다른 글

    프로그래머스 도둑질 - Java  (0) 2023.05.26
    백준 7569, 2573 - Java  (0) 2023.05.26
    [ SWEA ] 1204, 1206, 9611  (0) 2023.05.17
    HackerRank - PriorityQueue  (0) 2023.05.11
    프로그래머스 여행경로 Java  (0) 2023.05.04
Designed by Tistory.