난이도 : 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 == 1
out of range
가 나와서 오류처리를 해줬음