ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

Intro

๐Ÿ’ก 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ์„ ์–ด๋–ป๊ฒŒ ํ• ๊ฒƒ์ธ๊ฐ€?

์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ m x n ๋ฐฐ์—ด์„ ์ƒ๊ฐํ•ด๋ณด์ž. ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก, ์•„๋ž˜๋กœ ๊ฐˆ ์ˆ˜๋ก ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋žญ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ดค์„ ๋•Œ,

๋…ธ๋žญ์ด์˜ ์œ„ ์•„๋ž˜๋Š” ๋…ธ๋žญ์ด์™€ column ์ธ๋ฑ์Šค๊ฐ€ ๋™์ผํ•˜๊ณ  row ์ธ๋ฑ์Šค๋Š” ํ•˜๋‚˜์”ฉ ์ฐจ์ด๋‚œ๋‹ค.

๋…ธ๋žญ์ด์˜ ์ขŒ์šฐ๋Š” ๋…ธ๋žญ์ด์™€ row ์ธ๋ฑ์Šค๊ฐ€ ๋™์ผํ•˜๊ณ  column ์ธ๋ฑ์Šค๋Š” ํ•˜๋‚˜์”ฉ ์ฐจ์ด๋‚œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฐฉํ–ฅ์ „ํ™˜์„ ํ•˜๊ณ  ์‹ถ์„๋•Œ๋Š” delta row(dr), delta column(dc) ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค

# ์ƒ, ์šฐ, ํ•˜, ์ขŒ
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]

# nr: next row, nc: next column
# cr: current row, cc: current column
for i in range(4):
    nr = cr + dr[i]
    nc = cc + dc[i]

 

 

thinking

์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ N = 5. ์ฆ‰, 5 x 5 ๋ฐฐ์—ด์„ ์ƒ๊ฐํ•ด๋ณด์ž.

๋‹ฌํŒฝ์ด ๋ฌธ์ œ๋Š” ์œ„์˜ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ 2์ฐจ์› ๋ฐฐ์—ด ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

์šฐ->ํ•˜->์ขŒ->์ƒ ์˜ ๋ฐฉํ–ฅ์ „ํ™˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ค€ ํ›„, ๋ฐฉํ–ฅ ์ „ํ™˜์ด ์ผ์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€ ๊ฐ’์„ ๋”ํ•˜๋‹ค๊ฐ€

 

5, 9, 13 ์ฒ˜๋Ÿผ ๋” ์ด์ƒ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ (์ฆ‰, row๋‚˜ column์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ฒ”์œ„ ๋ฐ–์ธ ๊ฒฝ์šฐ) ์™€

 

16์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„ ์•ˆ์—๋Š” ๋“ค์ง€๋งŒ, ๋” ๊ฐ€๋ ค๊ณ  ํ•ด๋„ ์ด๋ฏธ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ๋œ ์ƒํƒœ๋ผ ๋ชป๊ฐ€๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด (์ฆ‰, 0์ด ์•„๋‹ˆ๋ผ๋ฉด)

 

์ด๋ฏธ r, c๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์คฌ์œผ๋ฏ€๋กœ ๋‹ค์‹œ ๋นผ์„œ ์›์œ„์น˜ ์‹œ์ผœ์ฃผ๊ณ  ๋ฐฉํ–ฅ ์ „ํ™˜ ๋’ค, ๋‹ค์‹œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ์„ค์ •ํ–ˆ๋‹ค.

 

๋ฐฉํ–ฅ ์ „ํ™˜ ์‹œ, dist += 1 ์„ ํ•ด์ฃผ๋ฉด dist๊ฐ€ 0,1,2,3,4,5,6,7,8,9, ... ๋กœ ๊ณ„์† ์ฆ๊ฐ€ํ•œ๋‹ค.

 

0, 1, 2, 3 ์œผ๋กœ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ฒŒ % ๋ฅผ ์‚ฌ์šฉํ•˜์ž!

 

 

์ฝ”๋“œ

print ํ•  ๋•Œ, ๋ฆฌ์ŠคํŠธ ์•ž์— * ๋ฅผ ๋ถ™์ด๋ฉด []๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
import sys
sys.stdin = open("input.txt")

T = int(input())

# row, col ์ธ๋ฑ์Šค๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฉํ–ฅ ์„ค์ • (๋‹ฌํŒฝ์ด ๋ฐฉํ–ฅ์ด๋‹ˆ๊นŒ ์šฐ->ํ•˜->์ขŒ->์ƒ)
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

for tc in range(1, T+1):
    N = int(input())
    snail = [[0]*N for _ in range(N)]
    # ์ดˆ๊ธฐ ์œ„์น˜ & ํšŒ์ „๋ฐฉํ–ฅ ์„ค์ •
    r, c = 0, 0
    dist = 0  # 0:์šฐ, 1:ํ•˜, 2:์ขŒ, 3:์ƒ

    for n in range(1, N*N + 1):
        snail[r][c] = n
        r += dr[dist]
        c += dc[dist]

        # ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ 0์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์ด ์ด๋ฏธ ์žˆ๋‹ค๋ฉด, dist ๋ฐฉํ–ฅ ์ฒด์ธ์ง€
        # ๊ทผ๋ฐ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด ์š”์†Œ ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ์›์œ„์น˜์‹œ์ผœ์ค˜์•ผํ•˜๋ฏ€๋กœ ๋นผ์ค˜์•ผํ•จ
        # ๊ทธ๋Ÿฐ๋‹ค์Œ dist์˜ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ณ , ๋ฐฉํ–ฅ ๋ฐ”๊ฟจ์œผ๋ฉด ๋‹ค์‹œ ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ํ–‰๋ ฌ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ
        if r < 0 or c < 0 or r >= N or c >= N or snail[r][c] != 0:
            # ์‹คํ–‰์ทจ์†Œ
            r -= dr[dist]
            c -= dc[dist]
            # dist๋Š” % 4 ์•ˆํ•ด์ฃผ๋ฉด 0123, 4567, ... ์ด๋Ÿฐ์‹์œผ๋กœ ์ˆซ์ž ์ปค์ง€๋ฏ€๋กœ ๋‚˜๋จธ์ง€๋กœ ์ ‘๊ทผ
            dist = (dist + 1) % 4
            #  ๋‹ค์‹œ gogo
            r += dr[dist]
            c += dc[dist]

    print("#{}".format(tc))
    for row in snail:
        print(*row)
    print()
๋Œ“๊ธ€