[algorithm] 정수를 나선형으로 배치하기

인철·2024년 3월 1일
0

algorithm

목록 보기
91/91
post-thumbnail

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int value = 1; // 채워야 할 정수 값
        int row = 0; // 현재 행 위치
        int col = 0; // 현재 열 위치
        int direction = 0; // 이동 방향 (0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위)

        while (value <= n * n) { // 모든 정수 값을 배열에 채우면 종료
            answer[row][col] = value++; // 현재 위치에 값을 채우고 다음 값으로 이동

            // 다음 이동할 위치 계산
            if (direction == 0) { // 오른쪽 방향으로 이동
                if (col == n - 1 || answer[row][col + 1] != 0) {
                // 현재 열이 배열의 마지막 열이거나, 오른쪽 칸이 이미 채워져 있으면 방향을 아래로 바꾼다
                // col == n -1 : 현재 열(col)이 배열의 마지막 열(n-1)
                // answer[row][col + 1] != : 현재 위치의 오른쪽 칸(col + 1)이 이미 채워져 있으면(0)
                    direction = 1;
                    row++;
                } else {
                    col++; // 그렇지 않으면 오른쪽으로 한칸 이동한다
                }
            } else if (direction == 1) { // 아래쪽 방향으로 이동
                if (row == n - 1 || answer[row + 1][col] != 0) {
                // 비슷한 패턴
                    direction = 2;
                    col--;
                } else {
                    row++; // 아래로 이동
                }
            } else if (direction == 2) { // 왼쪽 방향으로 이동
                if (col == 0 || answer[row][col - 1] != 0) {
                // 
                    direction = 3; 
                    row--;
                } else {
                    col--;
                }
            } else if (direction == 3) { // 위쪽 방향으로 이동
                if (row == 0 || answer[row - 1][col] != 0) {
                    direction = 0;
                    col++;
                } else {
                    row--;
                }
            }
        }

        return answer;
    }
}
어렵다잉
profile
같은글이있어도양해부탁드려요(킁킁)

0개의 댓글