fork download
  1. #include <stdio.h>
  2.  
  3. int arr[399][397];
  4.  
  5. int main()
  6. {
  7. int n, x, y, X, Y, l, dir, finish, i, j;
  8. int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
  9.  
  10. scanf("%d", &n);
  11.  
  12. if(n == 1) // n이 1일 때 예외 처리
  13. {
  14. printf("*");
  15.  
  16. return 0;
  17. }
  18.  
  19. X = 4 * n - 1; // X좌표 상한선
  20. Y = 4 * n - 3; // Y좌표 상한선
  21. x = 2 * n; // X좌표 시작값
  22. y = x - 2; // Y좌표 시작값
  23. l = 2; // 변의 길이
  24. dir = 0; // 방향
  25. arr[x][y] = 1;
  26.  
  27. while(1)
  28. {
  29. for(i=0;i<l;i++)
  30. {
  31. x += dx[dir]; // 이동
  32. y += dy[dir]; // 이동
  33. if(x < 0 || x >= X || y < 0 || y >= Y) // 마지막 변이 길이가 짧아서 배열 범위를 벗어남
  34. {
  35. finish = 1;
  36. break;
  37. }
  38. arr[x][y] = 1;
  39. }
  40. dir++; // 방향 전환
  41.  
  42. if(finish == 1)
  43. {
  44. break;
  45. }
  46. else if(dir == 4) // 변 길이 증가
  47. {
  48. dir = 0;
  49. l += 2;
  50. }
  51. else if(dir == 2) // 변 길이 증가
  52. {
  53. l += 2;
  54. }
  55. }
  56.  
  57. for(i=0;i<X;i++)
  58. {
  59. if(i == 1) // 둘째줄 예외 처리
  60. {
  61. printf("*\n");
  62. continue;
  63. }
  64. for(j=0;j<Y;j++) // 한 글자씩 출력
  65. {
  66. if(arr[i][j] == 1)
  67. {
  68. printf("*");
  69. }
  70. else
  71. {
  72. printf(" ");
  73. }
  74. }
  75. if(i < X-1) // 줄 바꿈
  76. {
  77. printf("\n");
  78. }
  79. }
  80.  
  81. return 0;
  82. }
Success #stdin #stdout 0s 4500KB
stdin
3
stdout
         
*
         
         
    *    
    *    
    *