์๋ ํ์ธ์, ์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 14503๋ฒ ๋ฌธ์ ์ธ “๋ก๋ด ์ฒญ์๊ธฐ” ๋ฌธ์ ๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ญ์ ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ง ๊ท์น์ ๋ฐ๋ผ ์ฒญ์ํ๋ ๋ฌธ์ ์ ๋๋ค. ํจ๊ป ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ , ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/14503
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ง ์์ญ์ ์ฒญ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
• ๋ก๋ด์ ํ์ฌ ์์น์์ ๋ถ, ์, ๋จ, ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉฐ, ์ฃผ์ด์ง ๊ท์น์ ๋ฐ๋ผ ์ฒญ์๋ฅผ ์ํํฉ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค์ ๊ทธ๋ฆฌ๋์ ํฌ๊ธฐ N๊ณผ M์ด ์ฃผ์ด์ง๋๋ค. (1 ≤ N, M ≤ 50)
• ๋ ๋ฒ์งธ ์ค์ ๋ก๋ด ์ฒญ์๊ธฐ์ ์ด๊ธฐ ์์น (si, sj)์ ์ด๊ธฐ ๋ฐฉํฅ (sd)์ด ์ฃผ์ด์ง๋๋ค. (0 ≤ si, sj < N, M) (0 ≤ sd < 4)
• ๋ค์ N๊ฐ์ ์ค์ ๊ทธ๋ฆฌ๋ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ค. (0: ๋น์นธ, 1: ๋ฒฝ)
3) ์ถ๋ ฅ
• ์ฒญ์ํ ๊ตฌ์ญ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ ๊ทธ๋ฆฌ๋์ ํฌ๊ธฐ N๊ณผ M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ๋ก๋ด ์ฒญ์๊ธฐ์ ์ด๊ธฐ ์์น์ ๋ฐฉํฅ์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ N๊ฐ์ ์ค์์ ๊ทธ๋ฆฌ๋ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ๋ฐฉํฅ ๋ฒกํฐ ์ ์
• ๋ถ, ์, ๋จ, ๋์ ์์๋ก ์ด๋์ ์ ์ํฉ๋๋ค.
• ๋ฐฉํฅ ๋งคํ: 0 -> ๋ถ, 1 -> ๋, 2 -> ๋จ, 3 -> ์
3) ๋ก๋ด ์ฒญ์๊ธฐ ๋์ ๊ตฌํ
• ์ด๊ธฐ ๋ฐฉํฅ์ด ๋/์์ธ ๊ฒฝ์ฐ ๋ถ/๋จ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
• ํ์ฌ ์์น๋ฅผ ์ฒญ์ํ๊ณ , ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ฉฐ ์ฒญ์ํ์ง ์์ ๊ณต๊ฐ์ ์ฐพ์ต๋๋ค.
• ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ๋์ด ์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ ํ์งํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ๋ฐฉํฅ ๋ฒกํฐ: ๋ถ, ์, ๋จ, ๋
di = [-1, 0, 1, 0]
dj = [0, -1, 0, 1]
"""
๋ฐฉํฅ ๋งคํ:
0 -> 0 (๋ถ)
1 -> 3 (์)
2 -> 2 (๋จ)
3 -> 1 (๋)
"""
# ๊ทธ๋ฆฌ๋ ํฌ๊ธฐ ์
๋ ฅ
N, M = map(int, input().split())
# ์์ ์์น์ ๋ฐฉํฅ ์
๋ ฅ
si, sj, sd = map(int, input().split())
# ๊ทธ๋ฆฌ๋ ๋งต ์
๋ ฅ
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
ans = 0 # ์ฒญ์ํ ๊ตฌ์ญ์ ์
# ์ด๊ธฐ ๋ฐฉํฅ ์กฐ์
if sd % 2 != 0:
if sd == 1:
sd = 3 # ๋ -> ์
else:
sd = 1 # ์ -> ๋
chk = True
while chk:
# ํ์ฌ ์์น๊ฐ ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ ์ฒญ์
if arr[si][sj] == 0:
arr[si][sj] = 2
ans += 1
for i in range(1, 5):
# ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์
nd = (sd + i) % 4
ni, nj = si + di[nd], sj + dj[nd]
# ์ฒญ์ํ์ง ์์ ๊ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ด๋
if arr[ni][nj] == 0:
si, sj, sd = ni, nj, nd
break
else:
# ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ๋์ด ์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ ํ์ง
ni, nj = si - di[sd], sj - dj[sd]
if arr[ni][nj] == 1:
chk = False # ํ์งํ ์ ์์ผ๋ฉด ์ข
๋ฃ
else:
si, sj = ni, nj # ํ์ง
# ์ฒญ์ํ ๊ตฌ์ญ์ ์ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ ๋ฒ์งธ ์ค์์ ๊ทธ๋ฆฌ๋์ ํฌ๊ธฐ N๊ณผ M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ๋ก๋ด ์ฒญ์๊ธฐ์ ์ด๊ธฐ ์์น (si, sj)์ ์ด๊ธฐ ๋ฐฉํฅ (sd)์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ N๊ฐ์ ์ค์์ ๊ทธ๋ฆฌ๋ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ arr ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
2) ์ด๊ธฐ ๋ฐฉํฅ ์กฐ์
• ์ ๋ ฅ๋ ๋ฐฉํฅ์ด ๋(1) ๋๋ ์(3)์ธ ๊ฒฝ์ฐ ๋ถ/๋จ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
• ๋(1)์ธ ๊ฒฝ์ฐ ์(3)๋ก ๋ณ๊ฒฝ
• ์(3)์ธ ๊ฒฝ์ฐ ๋(1)๋ก ๋ณ๊ฒฝ
3) ๋ก๋ด ์ฒญ์๊ธฐ ๋์ ๊ตฌํ
• chk ๋ณ์๋ฅผ True๋ก ์ค์ ํ๊ณ , ๋ฃจํ๋ฅผ ์์ํฉ๋๋ค.
• ํ์ฌ ์์น๊ฐ ์ฒญ์๋์ง ์์ ๊ฒฝ์ฐ ์ฒญ์ํ๊ณ , ์ฒญ์ํ ๊ตฌ์ญ์ ์๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
• ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ฉด์ ์ฒญ์๋์ง ์์ ๊ณต๊ฐ์ ์ฐพ์ต๋๋ค. ์ฒญ์๋์ง ์์ ๊ณต๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ์ด๋ํฉ๋๋ค.
• ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ๋์ด ์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ ํ์งํฉ๋๋ค. ํ์งํ ์ ์์ผ๋ฉด ๋ฃจํ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
4) ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ์ฒญ์ํ ๊ตฌ์ญ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
5) ์์
3 3
1 1 0
1 1 1
1 0 1
1 1 1
์ด ์์์์๋ N = 3, M = 3, si = 1, sj = 1, sd = 0์ด๋ฉฐ, arr๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค:
arr = [
[1, 1, 1],
[1, 0, 1],
[1, 1, 1]
]
• ์ด๊ธฐ ์์น (1, 1)์ด ์ฒญ์๋์ง ์์์ผ๋ฏ๋ก ์ฒญ์ํ๊ณ , ans๋ฅผ 1๋ก ์ฆ๊ฐ์ํต๋๋ค.
• ์ผ์ชฝ์ผ๋ก ํ์ ํ์ฌ ์์ชฝ(3) ๋ฐฉํฅ์ ๊ฒ์ฌํฉ๋๋ค. (0 -> 3)
• ์์ชฝ์ ๋ฒฝ์ด ์์ผ๋ฏ๋ก ๋ถ์ชฝ(0) ๋ฐฉํฅ์ ๊ฒ์ฌํฉ๋๋ค. (3 -> 0)
• ๋ถ์ชฝ์ ๋ฒฝ์ด ์์ผ๋ฏ๋ก ๋์ชฝ(1) ๋ฐฉํฅ์ ๊ฒ์ฌํฉ๋๋ค. (0 -> 1)
• ๋์ชฝ์ ๋ฒฝ์ด ์์ผ๋ฏ๋ก ๋จ์ชฝ(2) ๋ฐฉํฅ์ ๊ฒ์ฌํฉ๋๋ค. (1 -> 2)
• ๋จ์ชฝ์ ๋ฒฝ์ด ์์ผ๋ฏ๋ก ํ์งํฉ๋๋ค. ํ์งํ ์ ์์ด ๋ฃจํ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
**
์๊ฐ ๋ณต์ก๋
์ด ๋ฌธ์ ์ ์๊ฐ ๋ณต์ก๋๋ ๊ทธ๋ฆฌ๋์ ํฌ๊ธฐ์ ๋ก๋ด ์ฒญ์๊ธฐ์ ์ด๋์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. ์ต๋ N * M์ ๊ทธ๋ฆฌ๋์์ ๋ชจ๋ ์นธ์ ํ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์ต์ ์ ์๋๋ฆฌ์ค์ ๋๋ค.
1. ์ ๋ ฅ ์ฒ๋ฆฌ
• ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๋ฐ O(N * M)์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
2. ๋ก๋ด ์ฒญ์๊ธฐ ๋์
• ๊ฐ ์นธ์ ์ต๋ ํ ๋ฒ๋ง ์ฒญ์ํ๋ฏ๋ก, ๋ชจ๋ ์นธ์ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ O(N * M)์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
๋ฐ๋ผ์, ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(N * M)์ ๋๋ค. ์ด๋ ์ฃผ์ด์ง ๊ทธ๋ฆฌ๋์ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
**
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 5525[IOIOI] (0) | 2024.07.18 |
---|---|
BOJ(๋ฐฑ์ค) 1417[๊ตญํ์์ ์ ๊ฑฐ] (0) | 2024.07.17 |
BOJ(๋ฐฑ์ค) 5567[๊ฒฐํผ์] (0) | 2024.07.12 |
BOJ(๋ฐฑ์ค) 14888[์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ] (0) | 2024.07.11 |
BOJ(๋ฐฑ์ค) 13458[์ํ ๊ฐ๋ ] (0) | 2024.07.10 |