diesuki4 2023. 5. 7. 06:41
Level 2. 삼각 달팽이

 

 

한 방향당 n, n-1, n-2, ..., 1, 0 개수대로 입력하면 된다.

 

피라미드 모양으로 생각하지 말고, 직각삼각형 모양으로 생각하면 쉽다.

1

2    9

3   10   8

4    5    6    7

 

#include <iostream>
#include <vector>

using namespace std;

vector<int> solution(int n)
{
    vector<int> answer((n + 1) * n / 2);
    vector<vector<int>> vv(n, vector<int>(n, -1));
    int dx[] = {0, 1, -1};
    int dy[] = {1, 0, -1};
    int num = 1, dcur = 0;
    int x = 0, y = -1;

    do 
    {
        for (int i = 0; i < n; ++i)
            vv[y += dy[dcur]][x += dx[dcur]] = num++;

        dcur = ++dcur % 3;
    }
    while (n--);

    num = 0;

    for (vector<int>& v : vv)
        for (int e : v)
            if (e != -1)
                answer[num++] = e;
            else
                break;

    return answer;
}