๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[๋ฐฑ์ค€]1913๋ฒˆ: ๋‹ฌํŒฝ์ด

by syLim___ 2023. 5. 10.
728x90

https://www.acmicpc.net/problem/1913

 

1913๋ฒˆ: ๋‹ฌํŒฝ์ด

N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์”ฉ ๋„์–ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฉฐ, ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†๋‹ค. N+1๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ž์—ฐ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ํ•œ ์นธ ๋„์–ด์„œ

www.acmicpc.net


n*n์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ ,

์ด๋Ÿฐ์‹์œผ๋กœ ์ญ‰์ญ‰ ์ฑ„์›Œ์ฃผ์—ˆ๋‹ค.

ํ™”์งˆ์ด ์™œ ์ด๋ ‡์ง€?

 

์•„๋ฌดํŠผ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ์ •์งํ•œ ์ฝ”๋“œ

n = int(input())
table = [[0 for j in range(n)] for i in range(n)]

target = int(input())

# ์ •๊ฐ€์šด๋ฐ ์ขŒํ‘œ ๊ตฌํ•˜๊ธฐ
x, y = n//2+1, n//2+1
# 1์„ ์ฑ„์›Œ๋„ฃ๊ธฐ
val = 1
table[x-1][y-1] = val

# ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์™ผ์ชฝ, ์œ„
dx = [0,1,0,-1]
dy = [1,0,-1,0]

# ํ•œ ๊ป๋ฐ๊ธฐ์”ฉ ์ฑ„์›Œ๋„ฃ๊ธฐ
for i in range(3,n+1,2):
  # ์ถœ๋ฐœ์ขŒํ‘œ๋กœ ์ด๋™ (์™ผ์ชฝ ๋Œ€๊ฐ์„ )
  x, y = x-1, y-1
  # ์˜ค๋ฅธ์ชฝ - ์•„๋ž˜ - ์™ผ์ชฝ - ์œ„ ์ˆœ์„œ๋Œ€๋กœ
  for j in range(4):
    # ๊ฐ๊ฐ n-1์นธ์”ฉ ์ฑ„์šฐ๊ธฐ
    for k in range(i-1):
      val += 1        
      x += dx[j]
      y += dy[j]
      table[x-1][y-1]=val

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
tx, ty = 0,0
for i in range(n):
  for j in range(n):
    print(table[i][j],end=' ')
    if table[i][j]==target:
      tx,ty = i+1, j+1
  print()
  
print(tx,ty)

 


 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ์ฝ”๋“œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌ๊ฒฝํ•ด๋ดค๋‹ค.

 

๋‚˜๋ž‘ ๋˜‘๊ฐ™์ด ํ‘ผ ์‚ฌ๋žŒ๋„ ์žˆ์—ˆ๊ณ , ๋น„์Šทํ•œ ํ’€์ด๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค.

๋‹จ์ˆœ๊ตฌํ˜„ ๋ฌธ์ œ์ธ ๋งŒํผ ๊ทœ์น™์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ณ , ์ˆซ์ž๋ฅผ ์ฑ„์›Œ๊ฐ€๋ฉด์„œ ๋ฐฉํ–ฅ์„ ์ ์ ˆํžˆ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๋“ฏํ•˜๋‹ค.

 

๊ธฐ์–ต์— ๋‚จ์€ ํ’€์ด๋Š” ๋งจ ๋ฐ”๊นฅ์ชฝ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ n, n-1, n-2, ... , 1 ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์›Œ๋„ฃ์€ ํ’€์ด์—ˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์ฑ„์›Œ์ง„ ์นธ์„ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋˜๋ฏ€๋กœ

๊ตฌํ˜„ ๋กœ์ง์„ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด ๋ณด์˜€๋‹ค.

 

728x90