코딩테스트

코테 Lv0 - 정수를 나선형으로 배치하기

Beekei 2024. 11. 19. 01:22
반응형

문제 설명

양의 정수 n이 매개변수로 주어집니다. 

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

제한사항

  • 1 ≤ n ≤ 30

입출력 예

입출력 예 #1

Input : 4 / Ouput : [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]

더보기

예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.

입출력 예 #2

Input : 5 / Ouput : [[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]]

더보기

예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.

제출코드

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

        int number = 1;
        int minRow = 0;
        int maxRow = n - 1;
        int minCol = 0;
        int maxCol = n - 1;

        while (number <= (n * n)) {
            for (int i = minCol; i <= maxCol; i++) {
                answer[minRow][i] = number++;
            }
            minRow++;
            for (int i = minRow; i <= maxRow; i++) {
                answer[i][maxCol] = number++;
            }
            maxCol--;
            for (int i = maxCol; i >= minCol; i--) {
                answer[maxRow][i] = number++;
            }
            maxRow--;
            for (int i = maxRow; i >= minRow; i--) {
                answer[i][minCol] = number++;
            }
            minCol++;
        }
        return answer;
    }
}
  1. 1부터 n까지 반복하며 2중 배열에 시계방향으로 값을 채워넣습니다.
    • 위쪽 열에 값이 모두 채워진다면 minRow 증가
    • 오른쪽 행에 값이 모두 채워진다면 maxCol 감소
    • 아래쪽 열에 값이 모두 채워진다면 maxRow 감소
    • 왼쪽 행에 값이 모두 채워진다면 minCol 증가

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

반응형