๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ฝ”๋“œ์—…(Code up)

[ ํŒŒ์ด์ฌ(python) ] ์ฝ”๋“œ์—… 1484 - 2์ฐจ์› ๋ฐฐ์—ด ๋‹ฌํŒฝ์ด ์ฑ„์šฐ๊ธฐ 4-1

by YWTechIT 2021. 5. 3.
728x90

๐Ÿ“ 1484 : [ ๊ธฐ์ดˆ - ๋ฐฐ์—ด ์—ฐ์Šต ] 2์ฐจ์› ๋ฐฐ์—ด ๋‹ฌํŒฝ์ด ์ฑ„์šฐ๊ธฐ 4-1

2์ฐจ์› ๋ฐฐ์—ด ์•ˆ์— ๋‹ฌํŒฝ์ด ๋ชจ์–‘์œผ๋กœ ๊ฐ’์„ ์ฑ„์šฐ๋Š” ๋ฌธ์ œ์ธ๋ฐ, ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด 1460๋ถ€ํ„ฐ ์ญ‰ ํ’€์—ˆ๋‹ค. ์ด 2๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋‚˜๋ˆ ์„œ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

โšก๏ธ while๋ฌธ์œผ๋กœ row, column ๋”ฐ๋กœ๋”ฐ๋กœ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฌ๊ธฐ

  1. n * m์˜ ํฌ๊ธฐ๋กœ ๊ฐ’์ด 0์ธ 2์ฐจ์› ๋ฐฐ์—ด arr์„ ์„ ์–ธํ•œ๋‹ค.
  2. row(ํ–‰), column(์—ด)์„ ๊ฐ๊ฐ 0๊ณผ -1๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋Š”๋ฐ, ์ด์œ ๋Š” 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ํ•ด๋‹น ์œ„์น˜์— cnt๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  3. ๊ทธ๋ฆฌ๊ณ  ์ค‘๊ฐ„์— ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๋ฅผ -1์”ฉ ๊ฐ์†Œ์‹œ์ผฐ๋Š”๋ฐ, ๋ฐ˜๋ณต๋ฌธ์ด ์ง„ํ–‰๋ ๋•Œ๋งˆ๋‹ค ์ฑ„์›Œ์•ผ ํ•˜๋Š” ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (0, 0)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ column์— ๊ฐ’์„ ์ฑ„์šฐ๊ณ  ๋‚œ ์ดํ›„ row-1 ๋ฒ”์œ„๋กœ ๊ฐ’์„ ์ฑ„์›Œ์•ผํ•˜๊ณ  ๋‹ค์‹œ column-1 ๋ฒ”์œ„๋กœ ๊ฐ’์„ ์ฑ„์›Œ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  4. ์ฑ„์›Œ์•ผ ํ•˜๋Š” ๋ฐฉํ–ฅ์ด โžก๏ธ, โฌ‡๏ธ์ผ๋•Œ๋Š” step = 1์˜ ๊ฐ’์œผ๋กœ, โฌ…๏ธ, โฌ†๏ธ์ผ๋•Œ๋Š” step = -1์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ’์„ ์ฑ„์›Œ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

โšก๏ธ dx, dy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฒŒ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•

  1. n * m์˜ ํฌ๊ธฐ๋กœ ๊ฐ’์ด 0์ธ 2์ฐจ์› ๋ฐฐ์—ด arr์„ ์„ ์–ธํ•œ๋‹ค.
  2. ๋‹ฌํŒฝ์ด ๋ฐฐ์—ด์ด ์‹œ์ž‘ํ•˜๋Š” ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•˜๊ณ , ๋ฐฉํ–ฅ์„ ์ง€์ •ํ•œ๋‹ค.
  3. R, D, L, U ์ˆœ์„œ์— ๋งž๊ฒŒ dx, dy๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  4. ๋งŒ์•ฝ, ๋ฒ”์œ„๊ฐ€ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฒ—์–ด๋‚œ ๊ฐ’์„ ์ง€์šฐ๊ณ  ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ ํ›„ ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค.
# 1๋ฒˆ ๋ฐฉ๋ฒ•
n, m = map(int, input().split())
arr = [[0] * m for _ in range(n)]
row, column, cnt = 0, -1, 0
row_size, column_size = n, m
step = 1

while row_size and column_size:
    for _ in range(column_size):    # fill column_index
        cnt += 1
        column += step
        arr[row][column] = cnt

    row_size -= 1

    for _ in range(row_size):    # fill row_index
        cnt += 1
        row += step
        arr[row][column] = cnt

    column_size -= 1
    step = -step    # switch direction

for i in arr:
    print(*i, ' ')
# 2๋ฒˆ ๋ฐฉ๋ฒ•
n, m = map(int, input().split())
arr = [[0] * m for _ in range(n)]
x, y, direction = 0, 0

# R, D, L, U
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]

for cnt in range(1, n*m+1):
    arr[x][y] = cnt
    x += dx[direction]
    y += dy[direction]

    if x < 0 or y < 0 or x >= n or y >= m or arr[x][y]:
        x -= dx[direction]
        y -= dy[direction]

        direction = (direction + 1) % 4
        x += dx[direction]
        y += dy[direction]

for i in arr:
    print(*i, ' ')
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€