c# 문제 41. 시계열(나선형) 배열 2
두 개의 정수를 입력받아 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("");
}
}