[プログラマーレベル2]カタツムリ


📃 問題の説明


カタツムリ匹


[質問元:プログラマー]

👨‍💻 解決策


これは頭が痛い問題です.
最初はルールを見つけて、少しずつ配列に入れたいと思っていました.
いくらクレヨンしんちゃんを投げても、あまりよくありません.
カタツムリを満たす数字の最大値を要求するだけです
n*n配列を埋めます.
この場合、flagを使用して次のように充填する必要があります.
条件を設定して、塗りつぶしの方向を変更します.

各条件に該当する場合は、充填方向を変更して続行します.
何というか、もっと正式な方法を考えてみましたが、頭が痛いので止めました!
终わります!

👨‍💻 ソースコード

def solution(n):
    snail = [[0 for i in range(n)] for i in range(n)]

    # 삼각 달팽이에 채울 숫자의 최대값
    maxNum = n * (n // 2 + 1)
    if not n & 1:
        maxNum -= (n // 2)

    top, bottom, left, right = 0, n - 1, 0, n - 1
    flag = 0
    row, col = -1, 0
    for i in range(1, maxNum + 1):
        if flag == 0:
            row += 1
            if row == bottom:
                flag = 1
                top += 1
                left += 1
        elif flag == 1:
            col += 1
            if col == right:
                flag = 2
                bottom -= 1
                right -= 1
        elif flag == 2:
            row -= 1
            col -= 1
            if row == top or col == left:
                flag = 0
                top += 1
                right -= 1
        snail[row][col] = i

    answer = []
    for i in range(n):
        for j in range(n):
            if snail[i][j]:
                answer.append(snail[i][j])

    return answer