๊ฑฐ๋์ ๋ฏธํ๊ณ ์ง๋จ๊ฒฐ๊ณผ๋ถํฐ!
์ ์๊ฐ ์ค๋ฅด๊ธด ์ฌ๋๋ค
645 -> 654
๊ทธ๋ด๋งํ๊ฒ ํ๊ฐ๋ฅผ ํ๋๋ฐ ๋ง์ง๋ง์ผ๋ก ํ์๋ ๋ฌธ์ ๊ฐ DFS ๋ฌธ์ ์๋ค.
๊ทผ๋ฐ ๋ถ๋ช ํ!!! ๋๋ ๋ฌธ์ ์์ด ๋ค ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ ์ ์ถํ๋ฉด 40%๊น์ง ์ฑ์ ์ด ์ฌ๋ผ๊ฐ๋ค๊ฐ 'ํ๋ ธ์ต๋๋ค'๊ฐ ๋ด๋ค
๋ถ๋ช ํ๋ ํ ์ผ์์ ์๋ง๋๊ฒ ์๋ค๋ ๊ฑฐ์๋๋ฐ, ๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ๋ญ๊ฐ ์กฐ๊ฑด์ ๋จ๋จํ ๋์น๊ณ ์๋ค๋ ์๊ฐ์ด ๋ค์ด์ ๊ณ์ ๋ค์ ๋ดค๋๋ฐ ์ค๋ฅ๋ฅผ ์ฐพ์ง ๋ชปํ๊ณ ์๊ฐ์ด ์ง๋ ํ๊ฐ๊ฐ ๋๋๋ฒ๋ ธ๋ค.
๊ทธ๋๋ ํด๋น ๋ฌธ์ ์ ๋ํ ๋ถ๋ถ ์ ์๊ฐ ๋ฐ์์ด ๋๊ฑด์ง 654์ ์ผ๋ก ์ ์๊ฐ ์ค๋ฅด๊ธด ์ฌ๋๋ค.
์ด๋ ๊ฒ ์์ํ๋ ๊ฒ๊ณผ ๊ฐ์ด DFS ๋ฌธ์ ๋ฅผ 100%ํด๊ฒฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ ๋ฒ์ฃผ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋์๊ณ , ์ด ๊น์ ๊ณ ๋๋ DFS๋ฌธ์ ๋ค๋ ํด๊ฒฐํด๋ณด๊ณ , ์ง๋์ฃผ์ ๊ณต๋ถ๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ BFS๋ฅผ ๊ณต๋ถํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋๋ก ํ๊ฒ ๋ค.
์คํ๋ ค ์ข์!
์ฐธ๊ณ ๋ก ์ง๋จ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ๋, ์์ ๊ฐ์ ํ๋ฉด์ฒ๋ผ ์ด๋์ ๋ ๊ณต๋ถํ๋ฉด ๋๋์ง์ ๋ํ ์ ๋ณด๋ ์ ๊ณตํด์ค๋ค.
์ด๊ฒ ์ฐธ ๋ง์์ ๋ ๋ค. ํ์คํ ๋๊ธฐ๋ถ์ฌ๋ฅผ ์ฃผ๋ ๋๋?
์ฝํ ๋ผ๋ ๊ฒ ๊ณต๋ถํ๋ฉด์๋ ๋ง์ฐํ ๋๋์ ๋ง์ด ๋ฐ๋๋ฐ ์ด๋ ๊ฒ ์ ํํ ์ซ์๊ฐ์ผ๋ก '37์ผ ํ sw์ญ๋ํ ์คํธ Aํ ํต๊ณผ' ์ด๋ ๊ฒ ์ ์ํด์ฃผ๋ ํ์ต์ ํ๊ณ ๋์์ 37์ผ ํ์ ๋ด๊ฐ ๋๋ฌด ๊ธฐ๋๋๋ค.
ํ์ต
์ด๋ฒ์ ์ ๋ฒ์ฃผ์ ํ์ตํ๋ DFS์ ๋๋ถ์ด์ BFS๋ฅผ ํ์ตํ๋ค.
์ผ๋จ BFS๋ DFS์ ๋ค๋ฅด๊ฒ ์ฌ๊ทํจ์๊ฐ ์๋ ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์ ํ, ๋ฑ, ๊ทธ๋ํํ์์ BFS์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋จผ์ ํ์ตํ๋ค.
์ด๋ ๊ฒ ๋ค์ ์์ ํ ๊ธฐ๋ณธ๋ถํฐ ํ์ตํ๋ฉด์ BFS๋ฅผ ๊ณต๋ถํ๋๊น ์ ์ ๋ฑ์ ์ฌ์ฉํ๋์ง, BFS๋ ํ๋ฅผ ์ฌ์ฉํด์ ์ด๋ป๊ฒ ํ์์ ํ๋๊ฑด์ง ํ๋ฆ์ ์ดํดํ ์ ์์๋ค.
BFS๋ DFS์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ๋ก pseudo ์ฝ๋๋ฅผ ์ ํ๊ฒ ๋์๋๋ฐ ํ์์ ํ๋ ์๋ฆฌ(visited๋ก ํ์์ฌ๋ถ ํ์ธ, ๊ทธ๋ํ ๋ฒ์ํ์ธ ๋ฑ)๋ DFS์ ์ ์ฌํ๊ธฐ์ ์ดํดํ๋ ๊ฒ ํฌ๊ฒ ์ด๋ ต์ง ์์๋ค.
๋ค๋ง, DFS๋ ์ฌ๊ทํจ์๋ก ์๋ก ์ฐพ์ ๋ ธ๋๋ฅผ ๋๊ธฐ์ง๋ง, BFS๋ ์๋ก ์ฐพ์ ๋ ธ๋๋ฅผ ํ์ ์ถ๊ฐํ๊ณ ํด๋น ํ๊ฐ ๋น์ด์๋ ์ํ๊ฐ ๋๊ธฐ ์ ๊น์ง ๊ณ์ ๋์๊ฐ๋ค๋ ์ ์ด ์ฐจ์ด์ ์ด๋ค.
์ด ์ฐจ์ด์ ์ ์ข ๋ ๋ช ํํ ์ฒด๊ฐํ๊ธฐ ์ํ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋ค!
ํ์ด๋ณธ ๋ฌธ์
# ๋ค ๋ฐฉํฅ ํ์ถ ๊ฐ๋ฅ ์ฌ๋ถ ํ๋ณํ๊ธฐ
์ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋๋ฐ, ์ด ๋ฌธ์ ๋ ์ฌ์ค 5์ฃผ์ฐจ DFS์์ ํ์ด๋ณธ # ๋ ๋ฐฉํฅ ํ์ถ ๊ฐ๋ฅ ์ฌ๋ถ ํ๋ณํ๊ธฐ์ ๋ฐฉํฅ๋ง ๋ค๋ฅด๊ณ ๋์ผํ ๋ฌธ์ ์ด๋ค.
์ฐจ์ด์ ์ด๋ผ๊ณ ํ๋ฉด ๋ค๋ฐฉํฅ(์ํ์ข์ฐ)์ ๋๋ฐฉํฅ(ํ, ์ฐ)์ด๋ผ๋ ์ ์ด๋ค.
n * m ํฌ๊ธฐ์ ์ด์ฐจ์ ์์ญ์ ์ข์ธก ์๋จ์์ ์ถ๋ฐํ์ฌ ์ฐ์ธก ํ๋จ๊น์ง ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋์ ํ ๋์๋ ๋ฐ๋์ ์ํ์ข์ฐ์ ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ฑ์ด ์๋ ์นธ์ผ๋ก๋ ์ด๋์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋ฑ์ด ๋ฐฐ์น ๋์ด ์๋ ๊ฒฝ์ฐ ์ค์ ๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก ํ์ถ์ ํ ์ ์์ต๋๋ค. ์ด ๋ ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์ธ์.
์ด ๋ฌธ์ ๋ํ ํ์ด ์ ๋ต์ ๋์ผํ๋ค.
1. n*m ๊ทธ๋ฆฌ๋ ๋ฒ์ ์์ ์๊ธฐ
2. ๋ฑ์ด ์๋ ์๋ฆฌ
3. ๋ฐฉ๋ฌธํ์ง ์์๋ ์๋ฆฌ
์ฌ๊ธฐ์ ๋ค๋ฅธ ์ ์ ์ฌ๊ท ํจ์๊ฐ ์๋ ํ๋ก ํด๋น ์ขํ๋ฅผ ๋ฐ๊ณ ํ๊ฐ ๋น์ด์์ ๋๊น์ง ๊ณ์ ๋๋ ๊ฒ์ด๋ค.
from collections import deque
n, m = tuple(map(int, input().split()))
q = deque()
arr = [
list(map(int, input().split()))
for _ in range(n)
]
visited=[
[False]*m
for _ in range(n)
]
dxs, dys = [0,1,0,-1],[1,0,-1,0]
def in_range(x, y):
return 0<=x and x<n and 0<=y and y<m
def can_go(x,y):
if not in_range(x,y):
return False
if visited[x][y] or arr[x][y] ==0:
return False
return True
def push(x, y):
visited[x][y] = True
q.append((x,y))
def bfs():
while q:
x, y = q.popleft()
for dx, dy in zip(dxs, dys):
new_x, new_y = x + dx, y+dy
if can_go(new_x, new_y):
push(new_x, new_y)
push(0,0)
bfs()
if(visited[n-1][m-1]):
print(1)
else:
print(0)
๐๐ป ์๋ ๊ธ ๋ณด๊ณ DFSํ์ด์ BFSํ์ด๋ฅผ ๋น๊ตํด์ ๋ณด๋ ๊ฑฐ ์ถ์ฒ๋๋ฆฝ๋๋น! ๐๐ป
์์ง์ BFS๋ณด๋ค DFS๊ฐ ์ต์ํ๋ฐ ๋ฌธ์ ๋ฅผ ๋ ํ๋ฉด์ ์ด๋ค ์ํฉ์ BFS, DFS ์ค์ ๋ญ๊ฐ ๋ ํจ์จ์ ์ผ์ง ํ๋จํ๋ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค!!
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 8์ฃผ์ฐจ (10/25-10/30), dp (0) | 2023.10.30 |
---|---|
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 7์ฃผ์ฐจ (10/17-10/23), ๋ฐฑํธ๋ํน (0) | 2023.10.23 |
[BOJ/13164] ํ๋ณต ์ ์น์ (๊ทธ๋ฆฌ๋) (0) | 2023.10.11 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 5์ฃผ์ฐจ (10/4-10/9), DFS (0) | 2023.10.09 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 4์ฃผ์ฐจ (9/27-10/2), ๋ฐฑํธ๋ํน (0) | 2023.09.30 |