์ง๋จ ๊ฒฐ๊ณผ
์ด๋ฒ์ ๊ณผ์ฐ ๋ฐฑํธ๋ํน ๋ช์์ ํ์ถํ ์ ์์๊น ๋จ๋ฆฌ๋ ๋ง์์ผ๋ก ์์นจ์ ์ผ์ด๋์๋ง์ ๊ฒฝ๊ฑดํ ๋ง์์ผ๋ก ์ค๋ ฅ์ง๋จ์ ํด๋ณด์๋ค.
๊ทธ ๊ฒฐ๊ณผ..
610 -> 645
์ ์๊ฐ ์์นํ๋ค!!
๋ฐฑํธ๋ํน ๋ช ํ์ถ!!!
์ญ์ ์ฑ์ฅ์ ๊ณ๋จํ์ด๋ผ๊ณ ํ๋๊ฐ..๐ฅน
๋๋์ด ๊ธฐ๋ณธ 4๋ฌธ์ ๋ฅผ ๋ค ํธ๋ ์พ๊ฑฐ๋ฅผ..!
๊ธฐ๋ณธ 4๋ฌธ์ ๋ฅผ ๋ค ํธ๋๊น ๊ฐ์๊ธฐ ๋ฌธ์ ๊ฐ ํ 10๊ฐ..?๊ฐ ๋ค์ ์ถ๊ฐ๋๋ ๊ฑธ ๋ณด์๋ค..
๋ญ๊ฐ ์ด์ ์์์ธ๊ฐ..ํ๋ ๋ง์์ผ๋ก ์๋ก ์ถ๊ฐ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ๋๋ฐ ๋ญ๊ฐ ํ ์ ์์ ๊ฒ๋ง ๊ฐ์ ๊ฐ๋จํ ๋ฌธ์ ๋ก ๋ณด์๋ค
๊ทผ๋ฐ ๋ฌธ์ ๋ง ๊ฐ๋จํ ๊ฑฐ์์๊น.. ๋ฐฑํธ๋ํน์์ ์ฐฉ์ํ ์์ด๋์ด๋ก visitedํจ์๋ฅผ ์ฌ์ฉํด์ ํ์ด๋ณด๊ธฐ๋ํ๊ณ ,, ๋ณด๋ค๋ณด๋ ์ค?์ด๊ฑฐ BFS์๋๊ฐ?๋ผ๋ ์๊ฐ์ด ๋ค์์ง๋ง ๊ฒฐ๊ตญ์ ํ์ง ๋ชปํ๋ค.
๊ทธ๋ ๊ฒ ๊ฒฐ๊ณผ์์๋ ์ค๋ฅธ์ชฝ ์ฌ์ง์์ ๋ณผ ์ ์๋ค์ํผ ๋ฐ๋ก "dfs, bfs์ ๋ํ ํ์ต์ด ํ์ํด์"๋ผ๋ ์ง๋จ์ ๋ฐ์๋ฐ,,
ํ์ง๋ง, ์ ์๊ฐ ์ฌ๋๋ค๋ ๊ธฐ์จ์ด ๋ ์ปค์ ์ด์ ๋ ๊ณต๋ถํด์ ํ๋ฉด ๋์ง!๋ผ๋ ์์ ๊ฐ์ผ๋ก ํจ๊ธฐ๋กญ๊ฒ ํ์ต์ ์์ํ๊ฒ ๋์๋ค
ํ์ต ์ ๋ต
์ด๋ฒ ์ฃผ ๋ด ํ์ต ์ ๋ต์ '์ฐจ๊ทผํ ์์ฐจ์ ์ผ๋ก' ์๋ค
์ผ๋จ ์ง๋จ ๊ฒฐ๊ณผ์์ ๋ฐ๋ก INTERMEDIATE LOW -> DFS์์ ๊ฐ๋ ๋ค์ ์ค๋ช ํด์ฃผ๋ ํ์ด์ง๋ก ๋์ด๊ฐ๋ค.
ํ์ง๋ง, DFS, BFS๋ฅผ ํ๋ถ ๋ ๋ฐฐ์ ์ง๋ง ๊ธฐ์ต ์์ ํฌ๋ฏธํ ๋๋ NOVICE HIGH->๊ทธ๋ํํ์ ์นดํ ๊ณ ๋ฆฌ์์ DFS๋ฅผ ํ๊ธฐ ์ ๊ฐ๋ ๋ค์ ํ์ตํ๋ ๊ฒ์ด ์ฐ์ ์ด์๋ค.
๊ฐ์ธ์ ์ผ๋ก DFS๋ ๋์๊ฒ ์ด๋ ค์ด ์์ญ์ด์๊ธฐ ๋๋ฌธ์ pseudo code๋ถํฐ ์์ ํ ์ฝ๋๊น์ง ๋์ถํด๋ด๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์๋๋ ์ฝ๋ํธ๋ฆฌ ์ค๋ช ์์ ์ ๊ณตํด์ค DFS ํ์์ ๋ํ ์ฝ๋์ด๋ค.
# pseudo code
function dfs(pos)
visit(pos)
for children of pos
if visited[child] == false
dfs(child)
# DFS ํ์ - ์ธ์ ํ๋ ฌ
def dfs(vertex):
for curr_v in range(1, VERTEXS_NUM + 1):
if(graph[vertex][curr_v] and not visited[curr_v]):
print(curr_v)
visited[curr_v] = True
dfs(curr_v)
# DFS ํ์ - ์ธ์ ๋ฆฌ์คํธ
def dfs(vertex):
for curr_v in graph[vertex]:
if not visited[curr_v]:
print(curr_v)
visited[curr_v] = True
dfs(curr_v)
ํฌ์ธํธ๋ ์ฌ๊ทํจ์์ด๋ค.
์๋ํ๋ฉด, ๋ฐฑํธ๋ํน์ฒ๋ผ ๊ทธ๋ํ์์ ๋ ๊น์ด ๋ชป๋ค์ด๊ฐ๋ฉด ๋์์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์์ ํ๋ฉด์ ์ฐ๊ฒฐ์ด ๋์ด์๊ณ , ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด ๋ค์ด๊ฐ๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ด ๋๊ฐ๋ ์ ์ ๋ ฅํ ์ฑ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๊ฒ ๋ค.
ํ์ด๋ณธ ๋ฌธ์
# ๋ ๋ฐฉํฅ ํ์ถ ๊ฐ๋ฅ ์ฌ๋ถ ํ๋ณํ๊ธฐ
์ฝํ ๊ณต๋ถ๋ฅผ ์กฐ๊ธ๋ง์ด๋ผ๋ ํด๋ดค๋ ์ฌ๋์ ์ด ๋ฌธ์ ํ์๊ณผ ๋น์ทํ ๋ฌธ์ ๋ค์ ์์ฒญ๋๊ฒ ๋ง์ด ๋ดค์ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์จ ์ด์ ๋ ๊ทธ ์ค ํ๋ช ์ด์๋ ๋ด๊ฐ ์ด๋ป๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํ๊ฒ ๋๋์ง ๊ณผ์ ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์์ด๋ค.
n * m ํฌ๊ธฐ์ ์ด์ฐจ์ ์์ญ์ ์ข์ธก ์๋จ์์ ์ถ๋ฐํ์ฌ ์ฐ์ธก ํ๋จ๊น์ง ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋์ ํ ๋์๋ ๋ฐ๋์ ์๋์ ์ค๋ฅธ์ชฝ 2๋ฐฉํฅ ์ค ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ฑ์ด ์๋ ์นธ์ผ๋ก๋ ์ด๋์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋ฑ์ด ๋ฐฐ์น ๋์ด ์๋ ๊ฒฝ์ฐ ์ค์ ๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก ํ์ถ์ ํ ์ ์์ต๋๋ค. ์ด ๋ ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์ธ์.
ํ์ด ์ ๋ต
1. n*m ๊ทธ๋ฆฌ๋ ๋ฒ์ ์์ ์๊ธฐ
2. ๋ฑ์ด ์๋ ์๋ฆฌ
3. ๋ฐฉ๋ฌธํ์ง ์์๋ ์๋ฆฌ
์ผ๋จ DFS๋ก ํ์ด์ผ๊ฒ ๋ค๋ ์ ๋ต์ด ์๋ฆฝ๋๋ค๋ฉด, ์ 3๊ฐ์ง ์กฐ๊ฑด์ ๋ง๋ ๊ณณ์ ๋ค๋ ๊ฐ๋ฉด ๋๋ค.
์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ ๊ฒฐ๋ก ์ ํ๋๋ง ์๋ฉด๋๋ค.
'๋์ ์ ๋ฐฉ๋ฌธํ๋?'
์ด ๊ฒฐ๋ก ์ ๊ฐ์ด ๋๋ฌํ๋ค๋ฉด ์ถ๋ ฅ์ visited[๋][์ ]์ ํด์ฃผ๋ฉด๋๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ๋ด๊ฐ ํผ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
n, m = tuple(map(int, input().split()))
arr = [
list(map(int, input().split()))
for _ in range(n)
]
visited=[
[0 for _ in range(m)]
for _ in range(n)
]
dxs, dys = [1,0],[0,1]
def in_range(x, y):
if x<0 or x>=n or y<0 or y>=m:
return False
if arr[x][y]==0 or visited[x][y]==1:
return False
return True
def dfs(x,y):
for dx, dy in zip(dxs, dys):
new_x = x + dx
new_y = y + dy
if in_range(new_x, new_y):
visited[new_x][new_y] = 1
dfs(new_x, new_y)
dfs(0,0)
print(visited[n-1][m-1])
์ด ๋ฌธ์ ์ด๋ ๊ฒ ์ค๋ช ํ๋ฉด DFS๊ฐ๋ ์๊ณ ~ ํ๋ฑ ์จ๋ผ๋ฝ! ํผ ๊ฑฐ ๊ฐ์๋ณด์ด์ง๋ง, ๊ณ ๋น๊ฐ ๋ง์๋ค.
์ผ์ชฝ ์ฌ์ง์ ๋ชจ๋ ๋ด๊ฐ ์ ์ถํ๋ ๊ฒฐ๊ณผ์ด๋ค.
์ด๋ ๊ฒ ๊ณ~~~์ ๋ฐํ์์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
๋๋๊ฒ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ณผ ์๋ก ํ๋ฆฐ ๊ฒ ์๋ ๊ฒ ๊ฐ์๋๋ฐ ๋ฐํ์์๋ฌ๊ฐ ๋์๋ค.
์ด์ ๋ ๋๋ฌด ์ด์ด๊ฐ ์์๋ค.
๋ฐํ์์๋ฌ ๋ก์ง์ด ๋๋ฌด ๊ณผํ๊ฒ ๋์๊ฐ๋ ๋์ง๋ง, ๋ด ๊ฒฝํ์ ๋ฒ์๊ฐ ๋ง์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ข ์ข ๋ดค๋ค.
๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋ ๋ฒ์ ์์ ํด๋น๋๋์ง ๊ฒํ ํ๋ ํจ์ ๋ด์ฉ ์ค ์ด ๋ถ๋ถ์ ์์๋ค.
์๋ฌ๊ฐ ๋๋ ์ฝ๋ ์์์๋ ์๋์ฒ๋ผ m๊ณผ n์ ๊ฑฐ๊พธ๋ก ์์ฑํ๋ค.
x<0 or x>=m or y<0 or y>=n
n*m ๊ทธ๋ฆฌ๋์ด๋ฉด nํ์ด๊ธฐ ๋๋ฌธ์ y์ ๊ณผ n์ด ์ฐ๊ด๋๋ค๊ณ ์๊ฐํ์๋๋ฐ, ์ง๊ธ ์๊ฐํ๋ ๋ ์ค์ค๋ก ๋๋ฌด ๊ผฌ์์ ์๊ฐํ๊ณ ์์๋ค. ๋ฉ์ฒญ,,
DFS ์์ ๋ถํฐ ๋ํํ ๋๋ฌด ์ด๋ ค์ด ๊ฑฐ๋ผ๊ณ ์ง๋ ๊ฒ๋จน์์๋๋ฐ ์ด๋ ๊ฒ ์ฐจ๊ทผํ ํธ๋๊น ํ๋ฆฌ๋ ์ด ์ฑ์ทจ๊ฐ์ ๋๋ ์ ์์ด์ ๋๋ฌด ๋ฟ๋ฏํ๋ค.
๋์ด๋ ๋ฎ์ ๋ฌธ์ ์์ฃผ๋ก ํ์์๋๋ฐ ๊ณ ๋๋ ๋ฌธ์ ๋ค์ ๋์ ํด๋ด์ผ๊ฒ ๋ค!
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 6์ฃผ์ฐจ (10/11-10/16), BFS (0) | 2023.10.13 |
---|---|
[BOJ/13164] ํ๋ณต ์ ์น์ (๊ทธ๋ฆฌ๋) (0) | 2023.10.11 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 4์ฃผ์ฐจ (9/27-10/2), ๋ฐฑํธ๋ํน (0) | 2023.09.30 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 3์ฃผ์ฐจ (9/20-9/25), ๋ฐฑํธ๋ํน (0) | 2023.09.23 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 2์ฃผ์ฐจ (9/13-9/18), ์์ ํ์ (0) | 2023.09.18 |