SSISO Community

갤러리정

[문제풀이] 달팽이 배열 - CSharp

[문제] 임의로 입력받은 정수크기의 배열을 만든뒤 달팽이 형식의 방향으로 숫자를 차례대로 넣어 출력하시오.

 

입력받은 값이 5라고 한다면 출력값은...  

       1  2  3  4  5
    16 17 18 19  6
    15 24 25 20  7
    14 23 22 21  8
    13 12 11 10  9
    
[풀이]

 

[x와 y값의 변화]
    1. x=0, y=0,1,2,3,4 
    2. y=4, x=1,2,3,4
    3. x=4, y=3,2,1,0
    4. y=3, x=3,2,1
    5. x=1, y=1,2,3
    6. y=2, x=2,3
    7. x=3, y=2,1
    8. y=2, x=2
    9. x=2, y=2 
    
    ☞ 반복실행수 : 4, 3, 2, 1    
    ☞ [1,2,3,5,9]번, [2,3,4,8]번줄을 각각 묶어서 보면 y값(또는 x값)이
       마지막으로 바뀐뒤 마지막y값보다 -1된 만큼만 수행하며
       실행방향이 바껴서 실행된다.
       (y값의 변동규칙 : 0,1,2,3,4 / 3,2,1,0 / 1,2,3 / 2,3 / 2)
                  
    ☞ y값이 변동시, 마지막 수행한 x값은 다음 x값 변동시의 x의 시작위치가 된다. 
       2번줄 : x의 마지막 변동된 값은 4, 3번줄 x의 값은 4  

 

public static void SnailArray()
{
     bool check = true;
     int arrCnt = 0;

 

     do
     {
         try
         {
             Console.Write("만들고 싶은 배열방의 크기를 정해주세요 : ");
            arrCnt = checked(Convert.ToInt32(Console.ReadLine()));
            check =  false;
            //올바른 정수값을 입력받았다면 빠져나옴.
            //정수값이 아니라면 에러메시지표시후 재입력하게 한다.
         }
         catch(Exception e)
         {
             Console.WriteLine(e.Message);
         }
     }while(check);

 

     //입력받은 정수값크기의 배열을 만든다.
     int[,] array = new int[arrCnt,arrCnt];

 

     int x = 0;  //배열의 열위치
     int y = -1;  //배열의 행위치
     int s = 1;  //배열의 숫자입력 방향을 바꿀때 사용
     int num = 0; //입력되는 숫자값
     int size = arrCnt;


     for(int i=0; i<arrCnt; i++) 
     {
         for(int j= 0; j<size; j++)
         {
            y = y + s;   // [0,1,2,3,4] [3,2,1,0] [1,2,3] [2,1] [2]
            num++;
            array[x,y] = num; 
         }


         size--;
         if(size != 0) 
         {
             for(int j = 0; j<size; j++)
            {
                x = x + s;    // [1,2,3,4] [3,2,1] [2,3] [2]
                num ++;     
                array[x,y] = num;
            }
         }
         s = s * (-1); // -1, 1, -1, 1
     }

 

     //배열값을 출력한다.

     for(int i=0;i<array.GetLength(0); i++)
     {
         for(int j=0;j<array.GetLength(1);j++)
            Console.Write("{0,3}", array[i,j]);
         Console.WriteLine();
     } 
}


1889 view

4.0 stars