두 개의 정수를 입력받아 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("");
}
}
'프로그래밍 문제 > c# 문제' 카테고리의 다른 글
c# 문제 43. 배열 오름차순, 내림차순 정렬 함수 (0) | 2023.09.19 |
---|---|
c# 문제 42. 입력받은 정수들 중 가장 큰 수, 작은 수 출력 (0) | 2023.09.18 |
c# 문제 40. 계산기 클래스 (0) | 2023.09.14 |
c# 문제 39. 정수를 입력받아 별을 출력 2 (0) | 2023.09.13 |
c# 문제 38. 2차원 나선형 배열, 시계열 배열 1 (0) | 2023.09.12 |
댓글