[문제 설명]
양의 정수 n이 매개변수로 주어집니다.
n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한
이차원 배열을 return 하는 solution 함수를 작성해 주세요.
[제한사항]
1. 1 ≤ n ≤ 30
def solution(n):
answer = [[]]
return answer
* 유형 : 이차원 리스트(배열)
- dir = r, d, l, u
- r : y+1, d : x+1, l : y-1, u : x-1
- [[0 for j in range(n)] for i in range(n)]
[A] (내가 쓴 답)
def solution(n):
answer = [[0 for j in range(n)] for i in range(n)]
x = 0
y = 0
dir = 'r'
if n == 1 :
return [[1]]
for i in range(n*n) :
answer[x][y] = i+1
if dir == 'r' :
y += 1
if y == n-1 or answer[x][y+1] != 0 :
dir = 'd'
elif dir == 'd' :
x += 1
if x == n-1 or answer[x+1][y] != 0 :
dir = 'l'
elif dir == 'l' :
y -= 1
if y == n-1 or answer[x][y-1] != 0 :
dir = 'u'
elif dir == 'u' :
x -= 1
if x == n-1 or answer[x-1][y] != 0 :
dir = 'r'
return answer
- y == n-1 : 배열의 제일 끝에 도달했을 때,
- arr[x][y+1] != 0 : 다음 칸을 봤을 때 0이 아닌 값 (= 이미 값이 있을 때)
- n = 1일 때 out of range 나와서 처리 필요
- answer[x][y] = i+1 : 값을 1부터 n*n으로 증가
[A] 다른 답들
def solution(n):
return [[ 4*i*(n-i) + (1+x+y - 2*i if (x==i or y==n-i-1) else (4*n - 6*i - x - y -3)) for i,x,y in row] for row in [[(min(n-x-1,x,n-y-1,y),x,y) for y in range(n)] for x in range(n)]]
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Python] [코딩 기초 트레이닝] / 다음에 올 숫자 (0) | 2024.08.24 |
---|---|
[Python] [코딩 기초 트레이닝] / 옹알이 (1) (0) | 2024.08.24 |
[Python] [코딩 기초 트레이닝] / 그림 확대 (0) | 2024.08.24 |
[Python] [코딩 기초 트레이닝] / 두 수의 합 (0) | 2024.08.24 |
[Python] [코딩 기초 트레이닝] / 전국 대회 선발 고사 (0) | 2024.08.24 |