위와 같은 탑 모양의 순열을 만드는 것이다. 규칙을 찾아서 수식화 하기에는 너무 어려워 보여서
2차원 배열을 통해서 똑같이 생성하는 함수를 만들기로 했다.
저렇게 생겼지만 실제로는
1
2 9
3 10 8
4 5 6 7 이렇게 생겼다고 생각하면 만들기에 더 간편했다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int arr[1000][1000];
vector<int> solution(int N) {
vector<int> answer;
int num=1;
int lv =1;
int x=0,y=0;
while(true){
int temp = num;
if(lv == 1){
while(x<N && y<N){
if(arr[x][y] == 0){
arr[x][y] = num;
num++;
x++;
}
else{
y++;
x--;
lv=2;
break;
}
}
if(lv == 1){
lv =2;
y++;
x--;
}
}
if(lv == 2){
while(x<N && y<N){
if(arr[x][y] == 0){
arr[x][y] = num;
num++;
y++;
}
else{
x--; y-=2;
lv=3;
break;
}
}
if(lv == 2){
x--; y-=2;
lv =3;
}
}
if(lv == 3){
while(x<N && y<N){
if(arr[x][y] == 0){
arr[x][y] = num;
num++;
x--; y--;
}
else{
x+=2; y++;
lv=1;
break;
}
}
}
if(num == temp)
break;
}
for(int i=1;i<=N;i++){
for(int j=0;j<i;j++){
answer.push_back(arr[i-1][j]);
}
}
return answer;
}
각 레벨을 정해서
레벨 1 : 아래로 내려가면서 채워 넣기
레벨 2 : 오른쪽으로 채워 넣기
레벨 3 : 왼쪽 대각선으로 채워넣기
해서 위와 같은 2차원 배열을 생성한 뒤 마지막 정답 벡터에 넣어주었다.
출처 - 프로래머스