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

sungeun·2023년 7월 10일
0

코딩 기초 트레이닝

목록 보기
121/124
post-thumbnail

📔 문제 설명

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

📌 제한사항

  • 1 ≤ n ≤ 30

🔍 입출력 예

nresult
4[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

🔍 입출력 예 설명

입출력 예 #1

  • 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
    행 \ 열0123
    01234
    11213145
    21116156
    310987
    따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.

입출력 예 #2

  • 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
    행 \ 열01234
    012345
    1161718196
    2152425207
    3142322218
    4131211109
    따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.

🐹 내가 작성한 코드

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];

        int k = 1;
        int right = -1;
        int bottom = 0;
        int top = 1;
        
        for(int i = n; i > 0; i--) {
            for(int j = 0; j < n; j++) {
                right += top;
                answer[bottom][right] = k;
                k++;
            }
            n--;
            
            for(int j = 0; j < n; j++) {
                bottom += top;
                answer[bottom][right] = k;
                k++;
            }
            top = top * (-1);
        }

        return answer;
    }
}
profile
Back-end Developer

0개의 댓글