https://school.programmers.co.kr/learn/courses/30/lessons/68645
규칙이 보일듯 안보여서 어려웠던 문제다.
보면 num이 차례대로 가로->세로->대각선으로 3가지 경우로 반복된다.
가로의 경우 x좌표가 증가하고 세로는 y좌표 대각선은 x,y좌표가 감소하므로
각각 if문을 통해 코드를 작성하였다.
class Solution {
public int[] solution(int n) {
int[][] map=new int[n][n];
int x=-1;
int y=0;
int num=1;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(i%3==0){
x++;
}else if(i%3==1){
y++;
}else if(i%3==2){
y--;
x--;
}
map[x][y]=num++;
}
}
int[] answer = new int[n*(n+1)/2];
int index=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(map[i][j]==0) break;
answer[index++]=map[i][j];
}
}
return answer;
}
}