문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
1 ≤ n ≤ 30
def solution(n):
answer = [[0]*n for _ in range(n)]
#우,하,좌,상
dx=[0,1,0,-1]
dy=[1,0,-1,0]
x,y=0,0
answer[x][y]=1
k=2
while k<=n*n:
for i in range(4):
while True:
nx=x+dx[i]
ny=y+dy[i]
if nx>=n or ny>=n or nx<0 or ny<0 or answer[nx][ny]!=0:
break
else:
answer[nx][ny]=k
x=nx
y=ny
k+=1
return answer
시계방향 나선형으로 배치하기 때문에
방향을 우, 하, 좌, 상 순서로 설정하였다.
초기값 설정후 k가 n*n을 넘기 전까지 반복문을 실행시켜준다.
먼저 오른쪽으로 좌표 값을 더해주면서
좌표가 범위를 넘거나 혹은 이미 그 좌표에 0이 아닌 값이 들어가 있는 경우 while문을 탈출시키도록 해주었다.
while문을 나가면 오른쪽 다음인 아랫쪽 방향으로 변한 뒤 다시 while문을 반복해준다.
이런식으로 k값이 모든 배열에 들어가 0인 값이 없을 때 전체 while문을 종료한다.