알고리즘/C#

[C#] 삼각 달팽이 - 프로그래머스

야아옹 2020. 11. 10. 22:40

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

 

풀이 : 처음엔 무슨 수학공식이 있는줄 알고 열심히 공식 만들어보다가 실패해서...구글링 참고하여 코딩하게 되었다..

나중에 java 할떄 다시 풀어보게 될것같다...ㅎ

 

조건 1 = 달팽이 안에 들어가는 수는 반드시  1~n 까지 합친것보다 작다!

조건 2 = ↓ → ↖ 순으로 배열(2차배열)을 채우게 된다!

 

public static int[] solution(int n)
{
    List<int> answer = new List<int>();
    int[,] arrays = new int[n,n];

    int num = 1;
    int x = -1, y = 0;
    int sumNum = Enumerable.Range(1, n).Sum();

    for (int i = 0; i < n; i++)
    {
        for (int j = i; j < n; j++)
        {
            if (i % 3 == 0)
                x++;
            else if (i % 3 == 1)
                y++;
            else if (i % 3 == 2)
            {
                x--;
                y--;
            }
            arrays[x, y] = num++;
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arrays[i, j] == 0) break;
            answer.Add(arrays[i, j]);
        }
    }
    return answer.ToArray();
}