본문 바로가기
프로그래밍 문제/c# 문제

c# 문제 41. 시계열(나선형) 배열 2

by 지나팩 2023. 9. 15.

두 개의 정수를 입력받아 2차원 배열의 크기로 생성하고 시계열 방향으로 1부터 순차적으로 1씩 증가하며 요소를 대입하는 코드를 작성하세요.

출력 예)

코드는 아래에~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 static void Main()
        {

 

//입력
            Console.Write("행 수를 입력하세요: ");
            int rows = int.Parse(Console.ReadLine());

            Console.Write("열 수를 입력하세요: ");
            int cols = int.Parse(Console.ReadLine());

            int[,] arr = new int[rows, cols];

            int x = 0;           //x축 인덱스
            int y = 0;           //y축 ㅇ인덱스
            int turnCount = 0;   //x, y축 변경
            int dir = 1;         //축에 따른 방향           

            int moveXCount = arr.GetLength(1);      //x축으로 이동할 횟수
            int moveYCount = arr.GetLength(0);      //y축으로 이동할 횟수

            int nextTurnCount = arr.GetLength(1) - 1;   //다음 턴까지의 횟수

            bool isMoveX = true;                    //이동 축

            for (int i = 0; i < arr.Length; i++)
            {
                arr[y, x] = i + 1;                  //요소 대입

                if (i == nextTurnCount)             //턴차례
                {
                    if (turnCount % 2 == 0)         //두 번의 턴이 일어나면
                    {
                        moveXCount--;     //다음 턴까지 남은 이동 횟수 감소
                        moveYCount--;
                    }
                    else
                    {
                        dir *= -1; //방향 변경
                    }

                    if(isMoveX)
                    {
                        isMoveX = false;
                        nextTurnCount += moveYCount;        //다음턴 까지 이동 횟수 추가                        
                    }
                    else
                    {
                        isMoveX = true;
                        nextTurnCount += moveXCount;        //다음턴 까지 이동 횟수 추가
                    }                    
                    turnCount++;                           //턴
                }

                if (turnCount % 2 == 0) x = x + dir; //좌우이동
                else y = y + dir;//상하이동

            }

 

 

 

//출력
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                for(int j = 0; j < arr.GetLength(1); j++)                
                {
                    Console.Write("{0}\t", arr[i, j]);
                }               
                Console.WriteLine("");
            }
        }

댓글