D2
Problem
SW Expert Academy ๋ฌํฝ์ด ์ซ์D2
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
Solution
1. ๋์๊ฐ ์ ์๋ ๋ฐฉํฅ์ ์ค์ ํด์ค๋ค.(์งํ๋ฐฉํฅ ์์ผ๋ก)
2. ์งํ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ์ค, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ผ ๋ ๋ฐฉํฅ์ ๋ฐ๊พผ๋ค.
- ์ ๋ ฅ์ด ์ด๋ฏธ ๋์ด ์์ ๋
- ๋ฒ์ ๋ฐ๊นฅ์ผ๋ก ๋๊ฐ์ ๋
Code
for test_case in range(1, int(input()) + 1 ):
N = int(input())
arr = [[0] * N for _ in range(N)]
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
recent_i = recent_j = i = j = 0
print(f'#{test_case}')
if N == 1: # ์์ธ์ฒ๋ฆฌ
print(1)
else:
while arr[recent_i][recent_j] == 0:
j += 1 # ํ๋ถํฐ ๋ฃ๊ธฐ
if 0 <= recent_i < N and 0 <= recent_j < N: # ๋ฒ์ ๋ด์์ ํ์
arr[recent_i][recent_j] = j # ํ๋์ฉ ๋ฃ๊ธฐ
recent_i += di[i % 4] # ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๊ธฐ
recent_j += dj[i % 4]
# ๋ง์ฝ ๋ฒ์๊ฐ ๋๋๊ฑฐ๋ 0์ด ์๋ ๋ถ๋ถ์ ๋ง๋๋ฉด
if recent_j >=N or recent_i >=N or arr[recent_i][recent_j] != 0 :
recent_i -= di[i % 4] # ์ด์ ์ผ๋ก ๋์๊ฐ์
recent_j -= dj[i % 4]
i += 1 # ๋ค์ ๋ฐฉํฅ์ผ๋ก ์ค์ ํ๊ณ
recent_i += di[i % 4] # ๋์๊ฐ๊ธฐ
recent_j += dj[i % 4]
for k in range(len(arr)):
print(*arr[k])
<๋ถ์กฑํ ๋ถ๋ถ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ์ ์๊ฒ ๋์์ด ๋ฉ๋๋ค!>
๋ฐ์ํ
'๐ STUDY > ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 4613. ๋ฌ์์ ๊ตญ๊ธฐ ๊ฐ์ ๊น๋ฐ (0) | 2023.03.06 |
|---|---|
| 1210. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - Ladder1 (0) | 2023.03.06 |
| 1961. ์ซ์ ๋ฐฐ์ด ํ์ (0) | 2023.03.05 |
| 4839. [ํ์ด์ฌ S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - ์ด์งํ์ (0) | 2023.03.05 |
| 4843. [ํ์ด์ฌ S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - ํน๋ณํ ์ ๋ ฌ (0) | 2023.03.05 |