-
[Python] ๋ฐฑ์ค 1913 ๋ฌํฝ์ด (๊ตฌํ)๐ป Algorithm/Python 2022. 7. 2. 15:39
๐ ๋ฌธ์
ํ์์ธ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ฉด, ๋ค์๊ณผ ๊ฐ์ด 1๋ถํฐ N2๊น์ง์ ์์ฐ์๋ฅผ ๋ฌํฝ์ด ๋ชจ์์ผ๋ก N×N์ ํ์ ์ฑ์ธ ์ ์๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฌํ ํ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ํ N2 ์ดํ์ ์์ฐ์๊ฐ ํ๋ ์ฃผ์ด์ก์ ๋, ๊ทธ ์ขํ๋ ํจ๊ป ์ถ๋ ฅํ์์ค. ์๋ฅผ ๋ค์ด N=5์ธ ๊ฒฝ์ฐ 6์ ์ขํ๋ (4,3)์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ์์ธ ์์ฐ์ N(3 ≤ N ≤ 999)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์น๋ฅผ ์ฐพ๊ณ ์ ํ๋ N2 ์ดํ์ ์์ฐ์๊ฐ ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
N๊ฐ์ ์ค์ ๊ฑธ์ณ ํ๋ฅผ ์ถ๋ ฅํ๋ค. ๊ฐ ์ค์ N๊ฐ์ ์์ฐ์๋ฅผ ํ ์นธ์ฉ ๋์ด์ ์ถ๋ ฅํ๋ฉด ๋๋ฉฐ, ์๋ฆฟ์๋ฅผ ๋ง์ถ ํ์๊ฐ ์๋ค. N+1๋ฒ์งธ ์ค์๋ ์ ๋ ฅ๋ฐ์ ์์ฐ์์ ์ขํ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์๋ฅผ ํ ์นธ ๋์ด์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
7
35์์ ์ถ๋ ฅ 1
49 26 27 28 29 30 31
48 25 10 11 12 13 32
47 24 9 2 3 14 33
46 23 8 1 4 15 34
45 22 7 6 5 16 35
44 21 20 19 18 17 36
43 42 41 40 39 38 37
5 7
๐ ํ์ด
๐ฌ Code
import sys input = sys.stdin.readline n = int(input()) m = int(input()) snail = [[0]*n for _ in range(n)] # ๊ฐ์ด๋ฐ 1 ์ฑ์ฐ๊ธฐ x = (n - 1) // 2 y = (n - 1) // 2 snail[x][y] = 1 # ๋ฐฉํฅ๋ฒกํฐ (์, ํ, ์ข, ์ฐ) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] i = 2 start = 3 while x != 0 or y != 0: while i <= start * start: if x == y == (n - 1) // 2: # ์์์ ์ด๋ฉด cnt ์ธํ , ํ ์นธ ์๋ก cnt_up, cnt_down, cnt_left, cnt_right = start, start - 1, start - 1, start - 2 x += dx[0] y += dy[0] cnt_up -= 1 elif cnt_right > 0: # ์ฐ x += dx[3] y += dy[3] cnt_right -= 1 elif cnt_down > 0: # ํ x += dx[1] y += dy[1] cnt_down -= 1 elif cnt_left > 0: # ์ข x += dx[2] y += dy[2] cnt_left -= 1 elif cnt_up > 0: # ์ x += dx[0] y += dy[0] cnt_up -= 1 snail[x][y] = i i += 1 n -= 2 start += 2 for j in range(len(snail)): print(*snail[j]) if m in snail[j]: mx = j + 1 my = snail[j].index(m) + 1 print(mx, my)
๐ก Soultion
๊ฐ์ด๋ฐ์์๋ถํฐ ์ฑ์๋๊ฐ๋ ค๊ณ ๊ทธ๋ ค๋ณด๋ ์ด๋ ํจํด์ด ํญ์ ๊ฐ์์ต๋๋ค. ๊ฐ์ด๋ฐ ์ขํ๋ฅผ ์์์ ์ผ๋ก ์ก๊ณ ์์์ ์์๋ถํฐ ์ฑ์๋๊ฐ๋ ์์์ ๋ง์ถฐ ์ซ์๋ฅผ ์ ์ฅํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์์์ ์ ๋ณด์ด๋ค์ํผ ํญ์ ((n-1)//2, (n-1)//2)์ ๋๋ค.
n = 7์ผ ๋๋ฅผ ๋ด ์๋ค.
- ๊ฐ์ฅ ์์ ์ ์ฌ๊ฐํ ์ฑ์ฐ๊ธฐ (3x3)
- n = 7 → ์์์ (3, 3)
- start = 3
- n = 3์ผ ๋์ ๊ฐ์ฅ ์์ ์ ์ฌ๊ฐํ๋ถํฐ ์ฑ์์ผ ํ๋ฏ๋ก start = 3์ผ๋ก ์์ํฉ๋๋ค. ์ซ์ i๊ฐ start * start์ธ 9๊ฐ ๋ ๋๊น์ง while๋ฌธ์ ๋ฐ๋ณตํ๋ฉฐ ์ด๋์์๋๋ก ์ด๋ํ๋ฉด์ ๋ฐฐ์ด์ ์ซ์๋ฅผ ์ฑ์๋๋ค.
- ์ค๊ฐ ํฌ๊ธฐ ์ ์ฌ๊ฐํ ์ฑ์ฐ๊ธฐ (5x5)
- n = 5 → ์์์ (2, 2)
- start = 5
- n = 5์ผ ๋์ ์ ์ฌ๊ฐํ์ ์ฑ์์ผ ํ๋ฏ๋ก start = 5๋ก ์์ํ๊ธฐ ์ํด start += 2๋ฅผ ํด์ค๋๋ค. ์์์ ์ (2, 2)๊ฐ ๋์ด์ผ ํ๋๋ฐ, ์์์ ๊ณ์ฐ ๊ณต์์ด ((n-1)//2, (n-1)//2)์ด๋ฏ๋ก ํ์ฌ n๊ฐ์ธ 7์์ 2๋ฅผ ๋นผ์ฃผ๋ n -= 2์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ซ์ i๊ฐ start * start์ธ 25๊ฐ ๋ ๋๊น์ง while๋ฌธ์ ๋ฐ๋ณตํ๋ฉฐ ์ด๋์์๋๋ก ์ด๋ํ๋ฉด์ ๋ฐฐ์ด์ ์ซ์๋ฅผ ์ฑ์๋๋ค.
- ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฑ์ฐ๊ธฐ (7x7)
- n = 3 → ์์์ (1, 1)
- start = 7
- n = 7์ผ ๋์ ์ ์ฌ๊ฐํ์ ์ฑ์์ผ ํ๋ฏ๋ก start = 7์ด ๋ฉ๋๋ค. ์์์ ์ ๊ตฌํ๊ธฐ ์ํด n = 3์ผ๋ก ๋ง๋ค๊ณ , ์ซ์ i๊ฐ start * start์ธ 49๊ฐ ๋ ๋๊น์ง while๋ฌธ์ ๋ฐ๋ณตํ๋ฉฐ ์ด๋์์๋๋ก ์ด๋ํ๋ฉด์ ๋ฐฐ์ด์ ์ซ์๋ฅผ ์ฑ์๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (BFS) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2615 ์ค๋ชฉ (Brute Force) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2178 ๋ฏธ๋ก ํ์ (BFS) (0) 2022.07.02 [Python] ๋ฐฑ์ค 1325 ํจ์จ์ ์ธ ํดํน (BFS) (0) 2022.07.02 [Python] ๋ฐฑ์ค 11725 ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (DFS) (0) 2022.07.02 - ๊ฐ์ฅ ์์ ์ ์ฌ๊ฐํ ์ฑ์ฐ๊ธฐ (3x3)