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

hgghfgf·2023년 6월 16일
0

프로그래머스

목록 보기
156/227

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

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

        int num = 1; // 배열에 채워질 정수 값
        int rowStart = 0; // 행의 시작 인덱스
        int rowEnd = n - 1; // 행의 끝 인덱스
        int colStart = 0; // 열의 시작 인덱스
        int colEnd = n - 1; // 열의 끝 인덱스

        while (num <= n * n) {
            // 왼쪽 -> 오른쪽
            for (int i = colStart; i <= colEnd; i++) {
                answer[rowStart][i] = num++;
            }
            rowStart++; // 행의 시작 인덱스 증가

            // 위쪽 -> 아래쪽
            for (int i = rowStart; i <= rowEnd; i++) {
                answer[i][colEnd] = num++;
            }
            colEnd--; // 열의 끝 인덱스 감소

            // 오른쪽 -> 왼쪽
            for (int i = colEnd; i >= colStart; i--) {
                answer[rowEnd][i] = num++;
            }
            rowEnd--; // 행의 끝 인덱스 감소

            // 아래쪽 -> 위쪽
            for (int i = rowEnd; i >= rowStart; i--) {
                answer[i][colStart] = num++;
            }
            colStart++; // 열의 시작 인덱스 증가
        }

        return answer;
    }
}

num이 n * n보다 작거나 같을 때까지 반복문을 실행합니다. 반복문은 배열을 나선형으로 채우기 위한 과정을 수행합니다.
왼쪽에서 오른쪽으로 이동합니다. colStart부터 colEnd까지 반복하면서 answer[rowStart][i]에 num 값을 대입합니다.
왼쪽 위에서 아래쪽으로 이동합니다. rowStart + 1부터 rowEnd까지 반복하면서 answer[i][colEnd]에 num 값을 대입합니다.
오른쪽에서 왼쪽으로 이동합니다. colEnd - 1부터 colStart까지 반복하면서 answer[rowEnd][i]에 num 값을 대입합니다.
오른쪽 아래에서 위쪽으로 이동합니다. rowEnd - 1부터 rowStart + 1까지 반복하면서 answer[i][colStart]에 num 값을 대입합니다.
행과 열의 시작과 끝 인덱스를 조정하여 다음 회전을 위한 준비를 합니다.
완성된 answer 이차원 배열을 반환합니다.

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

0개의 댓글