문제 : 삼각 달팽이
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
분석
일단 탑 구조의 형태를 계단 형태로 바꿔주고 생각해보자.
계단 형태로 바꾸니 배열 형태로 가정할 수 있다. 이때 규칙을 다음과 같이 찾을 수 있다.
0. 하양 → 우향 → 좌상 → 순으로 반복이 된다.
1. 길이는 n에서 반복할 수록 1씩 감소한다.
2. 방향이 꺽이는 총횟수는 n이다.
구현
vector<int> solution(int n)
{
vector<int> answer;
vector<vector<int>> snail(n, vector<int>(n));
int value = 1, way = 0, y = 0, x = 0;
for (size_t i = 0; i < n; i++)
{
switch (way)
{
// 하양
case 0:
for (size_t j = i; j < n; j++)
{
snail[y++][x] = value++;
}
y--;
x++;
way = 1;
break;
// 우향
case 1:
for (size_t j = i; j < n; j++)
{
snail[y][x++] = value++;
}
y--;
x -= 2;
way = 2;
break;
// 좌상향
case 2:
for (size_t j = i; j < n; j++)
{
snail[y--][x--] = value++;
}
y += 2;
x++;
way = 0;
break;
}
}
// input answer
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < i + 1; j++)
{
answer.push_back(snail[i][j]);
}
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] - 문자열 압축 (0) | 2021.01.20 |
---|---|
[프로그래머스 C++] - 카카오 프렌즈 컬러링북 (0) | 2021.01.19 |
[프로그래머스 C++] - 프린트 (0) | 2021.01.17 |
[프로그래머스 C++] - 주식 가격 (0) | 2021.01.16 |
[프로그래머스 C++] - 기능 개발 (0) | 2021.01.15 |