본문 바로가기
코딩테스트/프로그래머스 기초

[코딩테스트 Lv.0] 정수를 나선형으로 배치하기

by 블루데이제이 2024. 5. 22.
728x90
반응형
문제 설명

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

제한사항
1 ≤ n ≤ 30
입출력 예
n	result
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까지 숫자를 채울 수 있습니다.

행 \ 열	0	1	2	3
0	1	2	3	4
1	12	13	14	5
2	11	16	15	6
3	10	9	8	7
따라서 [[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까지 숫자를 채울 수 있습니다.

행 \ 열	0	1	2	3	4
0	1	2	3	4	5
1	16	17	18	19	6
2	15	24	25	20	7
3	14	23	22	21	8
4	13	12	11	10	9
따라서 [[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 합니다.

내 풀이
Java
class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        
        int num = 1;
        int rowS = 0;
        int rowE = n - 1;
        int colS = 0;
        int colE = n - 1;
        
        while(num <= n * n){
            
            for(int i = colS; i <= colE; i++){
                answer[rowS][i] = num++;
            }
            rowS++;
            
            for(int i = rowS; i <= rowE; i++){
                answer[i][colE] = num++;
            }
            colE--;
            
            for(int i = colE; i >= colS; i--){
                answer[rowE][i] = num++;
            }
            rowE--;
            
            for(int i = rowE; i >= rowS; i--){
                answer[i][colS] = num++;
            }
            colS++;
                       
            
        }
        
        
        return answer;
    }
}
Python
def solution(n):
    answer = [[0 for i in range(n)] for j in range(n)]
    
    num = 1
    rs, re, cs, ce = 0, n - 1, 0, n - 1;
    
    while(num <= n * n):        
        for i in range(cs, ce + 1):
            answer[rs][i] = num
            num += 1
        rs += 1
                
        for i in range(rs, re + 1):
            answer[i][ce] = num
            num += 1
        ce -= 1
        
        for i in range(ce, cs - 1, -1):
            answer[re][i] = num
            num += 1
        re -= 1
        
        for i in range(re, rs - 1, -1):
            answer[i][cs] = num
            num += 1
        cs += 1
    
    return answer

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90
반응형