DuckingRacoon
프로그래머스 | 삼각 달팽이 본문
출처
🌐 코딩테스트 연습 - 삼각 달팽이 | 프로그래머스 스쿨
문제
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

제한사항
• n은 1 이상 1,000 이하입니다.
입출력 예시
n result
| 4 | [1,2,9,3,10,8,4,5,6,7] |
| 5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
| 6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
풀이
1차 풀이
#include <vector>
using namespace std;
vector<int> solution(int n)
{
vector<vector<int>> tower(n);
for (int i = 0; i < n; ++i)
{
for (int j = 0; j <= i; ++j)
tower[i].push_back(0);
}
int level = 0, order = 0, layer = 0;
bool isDown = true, isLeft = false, isUp = false;
for (int i = 1; i <= (n + 1) * n / 2; ++i)
{
tower[level][order] = i;
if (isDown)
{
++level;
if (level >= n - layer)
{
--level;
++order;
isLeft = true;
isDown = false;
}
}
else if (isLeft)
{
++order;
if (order >= level - layer + 1)
{
--level;
order -= 2;
isUp = true;
isLeft = false;
}
}
else if (isUp)
{
--level;
--order;
if (level <= layer*2)
{
level += 2;
order += 1;
isDown = true;
isUp = false;
++layer;
}
}
}
vector<int> answer;
for (const vector<int>& tow : tower)
{
for (const int& t : tow)
answer.push_back(t);
}
return answer;
}
풀이가 좀 그렇지만 일단은 됐다.
'알고리즘' 카테고리의 다른 글
| 백준 | 평범한 배낭 (0) | 2025.09.03 |
|---|---|
| 프로그래머스 | 단속카메라 (0) | 2025.09.03 |
| 프로그래머스 | 이진 변환 반복하기 (0) | 2025.09.03 |
| 프로그래머스 | 최솟값 만들기 (0) | 2025.09.03 |
| 프로그래머스 | 최댓값과 최솟값 (1) | 2025.09.03 |