오늘의 알고리즘
[C++]월간 코드 챌린지 시즌1 삼각 달팽이(프로그래머스 2레벨)
하늘하늘 .
2022. 4. 9. 21:58
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n)
{
vector<int> answer = {};
vector<int> vecCheck = {};
vector<vector<int>> vec(n, vector<int>(n));
vecCheck.push_back(n);
vecCheck.push_back(2*n - 1);
int iMax = 0;
if (n % 2 == 0)
iMax = (n + 1) * (n * 0.5);
else
iMax = (n + 1) * (int)(n * 0.5) + (n + 1) * 0.5;
int iNumber = 0;
int iDir = 1;
int iX = 0;
int iY = 0;
for (int i = 2; i < n; ++i)
{
vecCheck.push_back(vecCheck[i-1] + n - i);
}
for (int i = 1; i < iMax + 1; ++i)
{
if (i == vecCheck[iNumber])
{
++iNumber;
++iDir;
if (iDir > 3)
iDir = 1;
}
if (iDir == 1)
{
vec[iX][iY] = i;
++iX;
}
else if (iDir == 2)
{
vec[iX][iY] = i;
++iY;
}
else
{
vec[iX][iY] = i;
--iX;
--iY;
}
}
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (vec[i][j])
answer.push_back(vec[i][j]);
else
break;
}
}
return answer;
}
비용이 클 줄 알았는데 생각보다 금방 나오더라 1000개라서 안될줄