본문 바로가기
Algorithm/Programmers

[Programmers] Lv.0 / 정수를 나선형으로 배치하기 / Java

by unknownomad 2024. 3. 14.

문제

 

풀이

class Solution {
    public int[][] solution(int n) {
        
        int[][] result = new int[n][n];
        int num = 1;
        int top = 0;
        int bottom = n - 1;
        int left = 0;
        int right = n - 1;
        
        while(num <= n * n) {
            for(int i = left; i <= right; i++) {
                result[top][i] = num++;
            }
            top++;
            
            for(int i = top; i <= bottom; i++) {
                result[i][right] = num++;
            }
            right--;
            
            for(int i = right; i >= left; i--) {
                result[bottom][i] = num++;
            }
            bottom--;
            
            for(int i = bottom; i >= top; i--) {
                result[i][left] = num++;
            }
            left++;
        }
        return result;
    }
}
class Solution {
    public int[][] solution(int n) {
    
        int[][] answer = new int[n][n];
        int num = 1;
        int x = 0, y = 0;
        int dx[] = {0, 1, 0, -1};
        int dy[] = {1, 0, -1, 0};
        int direction = 0;

        while (num <= n * n) {
            answer[x][y] = num++;

            int nx = x + dx[direction];
            int ny = y + dy[direction];

            if (nx < 0 || nx >= n || ny < 0 || ny >= n || answer[nx][ny] != 0) {
                direction = (direction + 1) % 4; // 범위 밖에 나갔을 때 방향전환
                nx = x + dx[direction];
                ny = y + dy[direction];
            }
            x = nx;
            y = ny;
        }
        return answer;
    }
}

 

출처

https://school.programmers.co.kr/learn/courses/30/lessons/181832

댓글