[Python] 달팽이 배열

yoonene·2022년 10월 15일
0

알고리즘

목록 보기
25/62

N x N 의 달팽이 배열을 만드는 방법

방향 패턴
오른쪽 -> 아래 -> 왼쪽 -> 위
오른쪽, 아래 : col 증가, row 증가
왼쪽, 위 : col 감소, row 감소
=> trans 변수 기준 세트

방향별 이동 칸 수 패턴
N -> N-1 -> N-1 -> N-2 -> N-2 -> N-3 -> N-3-> ... -> 1 -> 1
처음에만 N 한 번, 이후로는 (아래, 왼쪽), (위, 오른쪽) 2번씩 같은 칸 수 만큼 이동한다.

def snail_board(n):
    board = [[0] * n for _ in range(n)]

    trans = 1
    cnt = 1
    row, col = 0, -1

    while n > 0:
        for i in range(n):  # ->, <- (col)
            col += trans
            board[row][col] = cnt
            cnt += 1

        n -= 1		# 첫 번째 외 2번씩 같은 칸 수 이동

        for i in range(n):  # 아래, 위 (row)
            row += trans
            board[row][col] = cnt
            cnt += 1

        trans *= -1	  # 증가/감소 방향 변경

    return board

print(snail_board(5))
# [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]
profile
NLP Researcher / Information Retrieval / Search

0개의 댓글