Algorithm/풀었던문제
알고리즘 기초 - 27 ( 달팽이 출력 )
dlgkstjq12
2019. 12. 29. 14:20
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | package Problem27; import java.util.Scanner; public class Main { public static void main(String[] args) { // 입력 n에 따른 달팽이 모양의 숫자를 출력 System.out.println("숫자를 입력하세요."); int n; Scanner scan = new Scanner(System.in); n = scan.nextInt(); // 입력한 숫자 n만큼의 배열을 생성함 int arr[][] = new int[n][n]; // 배열의 자표를 나타내는 변수 x,y 생성 int x = 0; int y = 0; // 이 숫자는 배열안에 들어갈 출력될 숫자. int num = 1; // 지금 가는 방향에서 몇번 이동을 할 것인지를 표현하는 변수 int f = n; // 4가 입력되었을 경우에 7번 방향을 바꿔서 이동해야되고, 5가 입력 되었을 경우에는 // 9번 방향을 바꿔서 이동해야되므로 2*n-1까지 범위를 지정한다. // 그리고 i를 4로 나눈 나머지가 어떤 수이냐에 따라서 switch문을 이용해서 // 위,아래,왼쪽,오른쪽 방향으로 진행방향을 결정해서 숫자를 출력한다. for (int i = 0; i < 2 * n - 1; i++) { switch (i % 4) { case 0: // 오른쪽 이동 for (int k = 0; k < f; k++) { arr[y][x] = num; x++; num++; } // 다음에는 y가 1증가해야하므로 y값에 미리 1을 증가시켜 놓는다. // 그리고 x의 값이 n+1까지 이동하게 되므로 x-1을 해준다. x--; y++; // 아까는 5칸 이동했었어야 되었지만 아래방향은 4칸만 이동하면 되므로 // f를 1 감소시켜준다. f--; break; case 1: // 아래쪽 이동 for (int k = 0; k < f; k++) { arr[y][x] = num; y++; num++; } y--; x--; break; case 2: // 왼쪽 이동 for (int k = 0; k < f; k++) { arr[y][x] = num; x--; num++; } x++; y--; // 아래에서 위로 갈때는 3회만 진행하면 되므로 다시 1을 빼준다. f--; break; case 3: // 위쪽 이동 for (int k = 0; k < f; k++) { arr[y][x] = num; y--; num++; } y++; x++; break; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.printf("%3d", arr[i][j]); } System.out.println(); } } } | cs |
출력결과
출처
https://www.youtube.com/watch?v=8tjHHJEWkbA&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=28