๋ฌธ์
๋ฌํฝ์ด๋ 1๋ถํฐ N*N๊น์ง์ ์ซ์๊ฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ ์ N์ ์
๋ ฅ ๋ฐ์ Nํฌ๊ธฐ์ ๋ฌํฝ์ด๋ฅผ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
๊ฐ์ฅ ์ฒซ ์ค์๋ ํ
์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๊ณ , ๊ทธ ์๋๋ก ๊ฐ ํ
์คํธ ์ผ์ด์ค๊ฐ ์ฃผ์ด์ง๋ค.
๊ฐ ํ
์คํธ ์ผ์ด์ค์๋ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ์ค์ '#t'๋ก ์์ํ๊ณ , ๋ค์ ์ค๋ถํฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ๋ฌํฝ์ด ์ซ์๋ฅผ ์ถ๋ ฅํ๋ค.
(t๋ ํ
์คํธ ์ผ์ด์ค์ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ฉฐ 1๋ถํฐ ์์ํ๋ค.)
์ ์ฝ ์ฌํญ
๋ฌํฝ์ด์ ํฌ๊ธฐ N์ 1 ์ด์ 10 ์ดํ์ ์ ์์ด๋ค. (1 ≤ N ≤ 10)
์์ ์ ๋ ฅ
2
3
4
์์ ์ถ๋ ฅ
#1
1 2 3
8 9 4
7 6 5
#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
ํด๊ฒฐ ๋ฐฉ๋ฒ
... ์์งํ ๋งํด์ ์ด๋ค ์์ผ๋ก ๊ตฌํ์ ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์๋ ๋ฌธ์ ์ด๋ค. ํน๋ณํ ์์ด๋์ด๊ฐ ์๊ฐ๋์ง ์์์ ๋ฌด์์ ๊ตฌํ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค.
1. ์์์ y์ขํ๋ฅผ ๊ณ ์ ํ๊ณ , x์ขํ๊ฐ ์ปค์ง๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค.
2. x๊ฐ ๋ฒ์ ๋ฐ์ผ๋ก ๊ฐ๊ฑฐ๋, 0์ด ์๋ ์ซ์๋ฅผ ๋ง๋๋ฉด x์ถ์ ๊ณ ์ ํ๊ณ y์ถ์ ์ฆ๊ฐ์ํค๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค.
3. y๊ฐ ๋ฒ์ ๋ฐ์ผ๋ก ๊ฐ๊ฑฐ๋, 0์ด ์๋ ์ซ์๋ฅผ ๋ง๋๋ฉด y์ถ์ ๊ณ ์ ํ๊ณ , x์ถ์ ๊ฐ์์ํค๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค.
4. x๊ฐ ๋ฒ์ ๋ฐ์ผ๋ก ๊ฐ๊ฑฐ๋, 0์ด ์๋ ์ซ์๋ฅผ ๋ง๋๋ฉด x์ถ์ ๊ณ ์ ํ๊ณ , y์ถ์ ๊ฐ์์ํค๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค.
....
phase ๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค๊ณ %4๋ฅผ ํด๋๊ฐ๋ฉด์ (0, 1, 2, 3) ์ผ๋ก ์ 4๋จ๊ณ์ ํ์ด์ฆ๋ฅผ ๊ตฌ๋ถํ๋ค.
phase ๋ " 2*n -1 " ๋งํผ ๋ฐ๋ณต๋๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด ์๋์ ๊ฐ์ ๊ธธ๊ณ ์๋ฆ๋ต์ง ๋ชปํ ์ฝ๋๊ฐ ์์ฑ๋๋ค.... ;^;
t = int(input())
def check_in_range(x,y,n):
return 0 <= x < n and 0 <= y <= n
for test_case in range(1, t+1):
n = int(input())
board = [[0]*n for _ in range(n)]
cnt = 1
phase = 0
i,j = 0, -1
while (phase != n*2 -1):
# ์ค๋ฅธ์ชฝ์ผ๋ก
if phase % 4 == 0:
for _ in range(n):
j += 1
if check_in_range(i,j,n):
if board[i][j] != 0:
j -= 1
break
else:
board[i][j] = cnt
cnt += 1
else:
j -= 1
phase += 1
# ์๋๋ก
elif phase % 4 == 1:
for _ in range(n):
i += 1
if check_in_range(i,j,n):
if board[i][j] != 0:
i -= 1
break
else:
board[i][j] = cnt
cnt += 1
else:
i -= 1
phase += 1
# ์ผ์ชฝ์ผ๋ก
elif phase % 4 == 2:
for _ in range(n):
j -= 1
if check_in_range(i,j,n):
if board[i][j] != 0:
j += 1
break
else:
board[i][j] = cnt
cnt += 1
else:
j += 1
phase += 1
# ์๋ก
elif phase % 4 == 3:
for _ in range(n):
i -= 1
if check_in_range(i,j,n):
if board[i][j] != 0:
i += 1
break
else:
board[i][j] = cnt
cnt += 1
else:
i += 1
phase += 1
print("#{}".format(test_case))
for arr in board:
print(*arr)
๊ฐ์ ์ฌํญ?
1. phase๋ฅผ ํตํด์ ์ด๋ ๋ฐฉํฅ์ ์ง์ ํ๋ ๊ฒ์
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
์ด๋ฐ ์์ผ๋ก ๊ด๋ฆฌํ์ผ๋ฉด ์ข์์ ๊ฒ ๊ฐ๋ค.
'๐์ฝ๋ฉํ ์คํธ > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] <D2> 1974 - ์ค๋์ฟ ๊ฒ์ฆ (0) | 2024.11.17 |
---|---|
[SWEA] <D2> 2001 - ํ๋ฆฌ ํด์น (0) | 2024.11.17 |
[SWEA] <D2> 1204 - ์ต๋น์ ๊ตฌํ๊ธฐ (0) | 2024.11.17 |
[SWEA] <D2> 1208 - Flatten (0) | 2024.11.15 |
[SWEA] <D3> 1206 - View (0) | 2024.11.05 |