문제
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.제한조건
- n은 1 이상 1,000 이하입니다.
입출력 예시
book_time | result |
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
C#
좌표로 두고 생각했을 때, 좌표 안에 들어가는 값을 예측하는 것은 어려움.
규칙적인 구조를 가지고 있는 것 = 인덱스!
따라서, 인덱스를 달팽이 모양으로 회전하면서 값을 채워 넣기로 함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Diagnostics;
public class Solution
{
public int[] solution(int n)
{
int[,] snail = new int[n, n];
int value = 1;
int x = -1;
int y = 0;
int down = n % 3;
int side = (n - 1) % 3;
for (int i = n; i > 0; i--)
{
int moveType = i % 3;
if (moveType == down)
{
for (int j = 0; j < i; j++)
snail[++x, y] = value++;
}
else if (moveType == side)
{
for (int j = 0; j < i; j++)
snail[x, ++y] = value++;
}
else
{
for (int j = 0; j < i; j++)
snail[--x, --y] = value++;
}
}
int[] answer = new int[value - 1];
int index = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
answer[index++] = snail[i, j];
}
return answer;
}
}
[성공]
프로그래머스에서 문제 확인