코린이의 소소한 공부노트

[프로그래머스/Lv.0] 정수를 나선형으로 배치하기 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.0] 정수를 나선형으로 배치하기

무지맘 2023. 7. 4. 16:46
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

1. Input, Output, Example

- n × n 배열에 1부터 n^2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 반환

 

2. Constraint

1) 1 n 30

 

3. Code

class Solution {
    public int[][] solution(int n) {
        int[][] ans = new int[n][n];
        int number = 1, x = 0, y = 0, change = 0;
        while(number<=n*n){
            switch(change%4){
                case 0: // 오른쪽 방향으로 전진
                    ans[x][y++] = number++;
                    if(y==n || ans[x][y]!=0){ // 맨 오른쪽 or 다음 칸이 이미 방문한 곳이라면
                        y--; x++; // 아래쪽으로 방향 전환
                        change++;
                    } break;
                case 1: // 아래쪽 방향으로 전진
                    ans[x++][y] = number++;
                    if(x==n || ans[x][y]!=0){ // 맨 아래 or 다음 칸이 이미 방문한 곳이라면
                        x--; y--; // 왼쪽으로 방향 전환
                        change++;
                    } break;
                case 2: // 왼쪽 방향으로 전진
                    ans[x][y--] = number++;
                    if(y==-1 || ans[x][y]!=0){ // 맨 왼쪽 or 다음 칸이 이미 방문한 곳이라면
                        y++; x--; // 위쪽으로 방향 전환
                        change++;
                    } break;
                default: // 위쪽 방향으로 전진
                    ans[x--][y] = number++;
                    if(x==-1 || ans[x][y]!=0){ // 맨 위쪽 or 다음 칸이 이미 방문한 곳이라면
                        x++; y++; // 왼쪽으로 방향 전환
                        change++;
                    }
            }
        }
        return ans;
    }
}

- +1