자료구조 & 알고리즘/프로그래머스
Level 2. 삼각 달팽이
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;
}