시계방향, 바깥에서 안으로 들어가는 나선 방향을 따라 숫자를 배치하는 문제
문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 $n^2$ 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ n ≤ 30
nxn 행렬 생성
$($0,0$)$ 부터 조건에 따라 숫자를 배치하기 위해 초기값 $($0,0$)$ 설정
dr = $($0,1,0,-1$)$ : 0, 하, 0, 상
dc = $($1,0,-1,0$)$: 우, 0, 좌, 0
>>> 시계방향$($우, 하, 좌, 상$)$으로 이동
첫 바퀴는 각 방향마다 n-1 번씩 이동하면 한 바퀴를 돌아서 원자리로 돌아옵니다.
그래서 좌,하 방향으로 이동해서 다음 바퀴를 돌며 이번에는 각 방향마다 n-3번씩 이동합니다.
제가 작성한 코드를 따라서 진행하면, n이 홀수 일 때는 마지막 n^2를 집어 넣을 때 각 방향 이동 횟수가 n-n=0이 되어 입력이 안됩니다.
그래서 마지막 값을 채워넣는 if문을 추가했습니다.
def solution(n):
A = [[0]*n for _ in range(n)]
r, c, dr, dc = 0, 0, (0,1,0,-1), (1,0,-1,0)
i = 1
for m in range(n-1,0,-2):
for j in range(4):
for _ in range(m):
A[r][c] = i
r, c = r + dr[j], c + dc[j]
i += 1
r, c = r + 1 , c + 1
if n % 2 == 1:
A[r][c] = n**2
return A
입출력 예
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 합니다.
'IT > Python' 카테고리의 다른 글
[백준] 1094번 막대기 [Python] - 이진법 (0) | 2023.08.16 |
---|---|
[프로그래머스] Lv.0 평행 [Python] (0) | 2023.08.16 |
[프로그래머스] Lv.0 옹알이[1] [Python] (0) | 2023.08.16 |
[프로그래머스] Lv.3 택시 요금 [Python] (0) | 2023.08.12 |