ALGORITHMS/구현

백준 1931 - 달팽이 배열

로그앤 2021. 12. 15. 12:01

n = 5 

25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17

n = 7 

import numpy as np
n = 7
GRAPH = [[0]*n for _ in range(n)]
r,c = 0,0
dist = 0
dr = [1,0,-1,0] # 하,우,상,좌
dc = [0,1,0,-1]
for i in range(n*n,0,-1):
    GRAPH[r][c] = i
    r+=dr[dist]
    c+=dc[dist]
    # BOUNDARY CHECKING --> if GRAPH[r][c] != 0, done with outer boundary (ie. "26", "10", "2"
    if  r < 0 or r >= n or c < 0 or c >= n or GRAPH[r][c] != 0:
        r-=dr[dist]
        c-=dc[dist]
        dist = (dist+1)%4
        r+=dr[dist]
        c+=dc[dist]
print(np.asarray(GRAPH))

[[49 26 27 28 29 30 31]
 [48 25 10 11 12 13 32]
 [47 24  9  2  3 14 33]
 [46 23  8  1  4 15 34]
 [45 22  7  6  5 16 35]
 [44 21 20 19 18 17 36]
 [43 42 41 40 39 38 37]]