https://school.programmers.co.kr/learn/courses/30/lessons/68645
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
vector<int> solution(int n) {
vector<vector<int>> vec;
const size_t size = n * (n + 1) / 2; // n = 4 => 1+2+3+4 = 10
size_t row = 0, col = 0, count = 1;
/*
n = 4 일 때 다음 배열을 먼저 생성
[
[0],
[0, 0],
[0, 0, 0],
[0, 0, 0, 0],
]
*/
vec.resize(n);
for (size_t i = 0; i < n; ++i)
vec[i].resize(i + 1);
while (count <= size)
{
// down
{
while (row < n && col < n && !vec[row][col])
vec[row][col] = count++, ++row;
--row, ++col; // 다음 좌표로 이동
}
// right
{
while (row < n && col < n && !vec[row][col])
vec[row][col] = count++, ++col;
col -= 2, --row; // 다음 좌표로 이동
}
// left diagonal
{
while (row < n && col < n && !vec[row][col])
vec[row][col] = count++, --row, --col;
row += 2, ++col; // 다음 좌표로 이동
}
}
return ::accumulate(vec.begin(), vec.end(), vector<int>(), [&](auto& acc, const auto& v) {
acc.insert(acc.end(), v.begin(), v.end());
return acc;
});
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] [투포인터] Lv 2. 연속된 부분 수열의 합 (0) | 2023.07.31 |
---|---|
[Programmers] Lv 2. 124 나라의 숫자 (0) | 2023.07.28 |
[Programmers] (탐욕법(Greedy)) Lv 2. 큰 수 만들기 (0) | 2023.07.27 |
[Programmers] Lv 2. 택배상자 (0) | 2023.07.26 |
[Programmers] (월간 코드 챌린지 시즌1) Lv 2. 쿼드압축 후 개수 세기 (0) | 2023.07.25 |
댓글