오늘의 알고리즘

[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개라서 안될줄