728x90
๋ฐ์ํ
๐ ๋ฌธ์ ํต์ฌ ์์ฝ
- ์ํฉ: $N \times M$ ์บ ํผ์ค์์ '๋์ฐ(I)'์ด๊ฐ '์ฌ๋(P)'์ ๋ช ๋ช ๋ง๋ ์ ์๋์ง ๊ตฌํ๊ธฐ.
- ์ ์ฝ: ๋ฒฝ(X)์ ๋ชป ์ง๋๊ฐ๊ณ , ๋น ๊ณต๊ฐ(O)๋ง ์ด๋ ๊ฐ๋ฅ.
- ๊ฒฐ๊ณผ: ๋ง๋ ์ฌ๋์ด 0๋ช ์ด๋ฉด "TT" ์ถ๋ ฅ.
- ๋ณธ์ง: ์์์ (I)์์ ๊ฐ ์ ์๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ BFS(๋๋น ์ฐ์ ํ์) ๋ฌธ์ ์
๋๋ค.
- DFS๋ก๋ ํ์ ์์ด์ !
๐ง ์ ๋ด ์ฝ๋๋ ํฐ์ก์๊น? (๋ณต๊ธฐ)
์ฒ์์ ํํ ํ๋ ์ค์ 4๊ฐ์ง๋ฅผ ๋ชจ์๋ดค์ต๋๋ค. (์ ๊ฐ ๋ค ํด๋ณธ ๊ฒ๋ค์ด์์...)
- ์กฐ๊ฑด๋ฌธ ์ฐ์ ์์ ๋์ฐธ์ฌ
if 0 <= nx < m and 0 <= ny < n or people[nx][ny] == "P":
์ด๋ ๊ฒ ์ฐ๋ฉดand๊ฐ ๋จผ์ ๊ณ์ฐ๋ฉ๋๋ค. ์ฆ, ๋ฒ์ ๋ฐ์ด์ด๋ ๋ท๋ถ๋ถ์people๋ฐฐ์ด์ ํ์ธํ๋ ค๋ค ๋ฐ๋ก IndexError๊ฐ ํฐ์ง๋๋ค. - ๋ฌดํ ๋ฃจํ์ ๋ช ๋ฐฉ๋ฌธ ์ฒดํฌ(
visited) ๋ฐฐ์ด์ด ์์ผ๋ฉด ๋์ฐ์ด๋ ๊ฐ๋ ๊ธธ์ ๋ฌดํ ๋ฐ๋ณตํด์ ๋๋๋ค. BFS์์ ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ์ ํ์ด ์๋ ํ์! - ์ธ๋ฑ์ค ํผ๋ (x, y) ๋ณดํต
people[ํ][์ด]์์์ด๋ฏ๋กpeople[y][x]๋ก ์ ๊ทผํด์ผ ํ๋๋ฐ, ์ด๊ฑธ ๊ฑฐ๊พธ๋ก ์ฐ๋ฉด ๋ ผ๋ฆฌ๊ฐ ๊ผฌ์ ๋๋ค. - ๋ฃจํ ์์ `print()
๋๋ฒ๊น ์ฉ์ผ๋ก ๋ฃ์print` ํ๋๊ฐ ๋ฐฑ์ค์์๋ '์๊ฐ ์ด๊ณผ'๋ฅผ ๋ถ๋ฅด๋ ์์ด ๋ฒํผ์ด ๋ฉ๋๋ค. ์ถ๋ ฅ์ ๋ง์ง๋ง์ ํ ๋ฒ๋ง!
๐ ์ต์ข ์ ๋ต ์ฝ๋ (Python)
import sys
from collections import deque
input = sys.stdin.readline
# 1. ๋ฐฉํฅ ์ค์ (์ํ์ข์ฐ)
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
n, m = map(int, input().split())
# 2. ์ง๋ ๋ฐ ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์ด๊ธฐํ
campus = [input().strip() for _ in range(n)]
visited = [[False] * m for _ in range(n)]
dq = deque()
# 3. ๋์ฐ์ด(I) ์์น ์ฐพ๊ธฐ
start_found = False
for i in range(n):
for j in range(m):
if campus[i][j] == "I":
dq.append((i, j))
visited[i][j] = True
start_found = True
break
if start_found: break
count = 0
# 4. BFS ์์
while dq:
y, x = dq.popleft()
for i in range(4):
ny, nx = y + dy[i], x + dx[i]
# ๋ฒ์ ๋ด์ ์๊ณ , ๋ฐฉ๋ฌธํ ์ ์์ผ๋ฉฐ, ๋ฒฝ์ด ์๋ ๋๋ง ์ด๋
if 0 <= ny < n and 0 <= nx < m:
if not visited[ny][nx] and campus[ny][nx] != "X":
visited[ny][nx] = True
if campus[ny][nx] == "P":
count += 1
dq.append((ny, nx))
# 5. ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(count if count > 0 else "TT")
๐ก ์ ๋ฆฌํ๋ฉฐ
์ด ๋ฌธ์ ๋ ์ฌ์ค "BFS์ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ผ๋ง๋ ์ ํํ๊ฒ ์งํค๋๋"๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ ๋๋ค.
- ๋ฒ์ ์ฒดํฌ๋ ๊ฐ์ฅ ๋จผ์ !
- ๋ฐฉ๋ฌธ ๋ฐฐ์ด๋ก ์ค๋ณต ์ ๊ฑฐ!
- ์กฐ๊ฑด ์์ (๋ฒ์ ํ์ธ ํ ๋ฐฐ์ด ์ ๊ทผ) ์งํค๊ธฐ!
๊ฒฉ์ ํ์ ๋ฌธ์ ์์ ์๊พธ ํ๋ฆฐ๋ค๋ฉด, ์ 3๊ฐ์ง ์ค ํ๋๋ฅผ ๋์น๊ณ ์์ ํ๋ฅ ์ด 90%์ ๋๋ค. ์ค๋ฒ 2 ์์ค์์ BFS๋ฅผ ์๋ฒฝํ ๋ค์ง๊ณ ์ถ์ ๋ถ๋ค๊ป ๊ฐ์ถํ๋ ๋ฌธ์ ์์ต๋๋ค!
728x90
๋ฐ์ํ