
난이도 : Lv.0
유형 : 이차원 리스트(배열), 구현


def solution(n):
arr = [[0]*n for i in range(n)]
mode = 1
x = 0
y = 0
if n == 1:
return [[1]]
for i in range(n*n):
arr[x][y] = i + 1
if mode%4 == 1:
y+=1
if y == n-1 or arr[x][y+1] != 0:
mode+=1
elif mode%4 == 2:
x+=1
if x == n-1 or arr[x+1][y] != 0:
mode+=1
elif mode%4 == 3:
y-=1
if y == n-1 or arr[x][y-1] != 0:
mode+=1
elif mode%4 == 0:
x-=1
if x == n-1 or arr[x-1][y] != 0:
mode+=1
return arr
mode : 방향을 정해주는 넘, 4로나눈 나머지로 방향을 정함(mode%4)
1 : 오른쪽2 : 아래3 : 왼쪽4 : 위어차피 시계방향으로 움직이므로 진행방향은 항상 R-> D -> L -> U 로 고정임
if mode%4 == 1:
y+=1
if y == n-1 or arr[x][y+1] != 0:
mode+=1
오른쪽으로 진행할 때는 열(y)이 증가하므로 y+=1
y == n-1 : 배열의 제일 끝에 도달했을 때
arr[x][y+1] != 0 : 다음 칸을 봤을 때 0이 아닌 값 즉, 이미 값이 들어가 있을 때
mode에 1을 더해줘 다음 방향으로 바꿈
나머지 애들도 움직이는 방향에 따라 동일하게 코드를 짜면 됨
n == 1out of range가 나와서 오류처리를 해줬음