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

nacSeo (낙서)·2024년 3월 27일
0

프로그래머스

목록 보기
136/169

문제 설명

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

제한사항

1 ≤ n ≤ 30

나의 코드

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int topRow = 0;
        int bottomRow = n-1;
        int leftCol = 0;
        int rightCol = n-1;
        int num = 1;
        
        while(num <= n*n) {
            // 왼 -> 오 이동
            for(int i=leftCol; i<=rightCol; i++) {
                answer[topRow][i] = num++;
            }
            // 다음 행 이동
            topRow++;
            
            // 위 -> 아래 이동
            for(int i=topRow; i<=bottomRow; i++) {
                answer[i][rightCol] = num++;
            }
            // 다음 열 이동
            rightCol--;
            
            // 오 -> 왼 이동
            for(int i=rightCol; i>=leftCol; i--) {
                answer[bottomRow][i] = num++;
            }
            // 다음 행 이동
            bottomRow--;
            
            // 아래 -> 위 이동
            for(int i=bottomRow; i>=topRow; i--) {
                answer[i][leftCol] = num++;
            }
            // 다음 열 이동
            leftCol++;
        }
        return answer;
    }
}

느낀 점

시계방향 나선형으로 돌아가므로, topRow, bottomRow, leftCol, rightCol을 정하여 1부터 n*n까지 돌아가며 num을 증가시키면서 넣어주면 되겠다. 알고리즘을 떠올리는 게 쉽지 않았고, 문제가 만났을 때 바로 나올 수 있도록 갈고 닦아야겠다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글