정수
n이 매개변수로 주어집니다.
밑변의 길이와 높이가 n인 삼각형에서
맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후,
첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을return하도록solution함수를 완성해주세요.
int totalCellSize = n * (n + 1) / 2;
int[] answer = new int[totalCellSize];
List<int[]> perimeterNumbers = new List<int[]>();
int number = n;
int index = 0;
int nextStart = 1;
while (number > 1)
{
int perimeterLength = 3 * number - 3;
perimeterNumbers.Add(new int[perimeterLength]);
for (int i = 0; i < perimeterLength; i++)
{
perimeterNumbers[index][i] = nextStart + i;
}
index++;
number -= 3;
nextStart = perimeterLength+1;
}
if (number == 1)
{
perimeterNumbers.Add(new int[]{nextStart});
}
n이 주어졌을 때 n + (n - 1) + (n - 2)가 테두리의 길이가 되며 다음 테두리를 길이가 n - 3이 주어졌을 때의 길이로 이어진다는 규칙성을 발견하여 이용하고자 함public class TriangularSnail
{
enum Direction
{
Down,
Right,
Up,
}
public static int[] Solution(int n)
{
int totalCellSize = n * (n + 1) / 2;
int[] answer = new int[totalCellSize];
int[][] triangle = new int[n][];
for (int i = 0; i < n; i++)
{
triangle[i] = new int[i + 1];
}
int row = -1; //현재 행
int col = 0; //현재 열
int num = 1; //이번에 칸에 넣을 숫자
Direction currentDirection = Direction.Down;
while (num <= totalCellSize)
{
currentDirection = ChooseDirection(row, col, triangle, currentDirection);
switch (currentDirection)
{
case Direction.Down:
row++;
break;
case Direction.Right:
col++;
break;
case Direction.Up:
row--;
col--;
break;
}
triangle[row][col] = num;
num++;
}
int idx = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < triangle[i].Length ; j++)
{
answer[idx] = triangle[i][j];
idx++;
}
}
return answer;
}
private static Direction ChooseDirection(int row, int col, int[][] triangle, Direction lastDirection)
{
if (lastDirection == Direction.Up && triangle[row - 1][col - 1] == 0)
return Direction.Up;
if (row + 1 < triangle.Length && triangle[row + 1][col] == 0)
return Direction.Down;
if (col + 1 < triangle[row].Length && triangle[row][col + 1] == 0)
return Direction.Right;
else
return Direction.Up;
}
}
Down, Right, Up int[][] triangle = new int[n][];
for (int i = 0; i < n; i++)
{
triangle[i] = new int[i + 1];
}
ChooseDirection 함수를 통해 이동방향을 결정 int idx = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < triangle[i].Length ; j++)
{
answer[idx] = triangle[i][j];
idx++;
}
}
triangle 배열을 1열로 나열해 결과를 도출