[알고리즘] 삼각 달팽이 level2

Jifrozen·2022년 11월 22일
0

Algorithm

목록 보기
63/70

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;
    }
}

0개의 댓글