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;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 0. 코드 처리하기 (0) | 2023.05.09 |
---|---|
Level 2. [1차] 프렌즈4블록 (0) | 2023.05.08 |
Level 0. 배열 조각하기 (0) | 2023.05.06 |
Level 0. 주사위 게임 3 (0) | 2023.05.06 |
Level 0. 세 개의 구분자 (0) | 2023.05.05 |