Home [Lv.2] 삼각 달팽이
Post
Cancel

[Lv.2] 삼각 달팽이

문제 정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

제한조건
  • n은 1 이상 1,000 이하입니다.

입출력 예시
book_timeresult
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;
	}
}

[성공]


프로그래머스에서 문제 확인

This post is licensed under CC BY 4.0 by the author.