๋ฌธ์
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14vXUqAGMCFAYD
๋ด ๋ฌธ์ ํ์ด
for _ in range(10):
t = int(input())
maze = [[] for _ in range(16)]
start = (0, 0)
check = False
for i in range(16):
now = list(map(int, list(input())))
if 2 in now:
tmp = now.index(2)
start = (i, tmp)
maze[i] = now
def dfs(x, y):
global check
if x < 0 or y < 0 or x >= 16 or y >= 16 or maze[x][y] == 1 or check: return
if maze[x][y] == 3:
check = True
return
if maze[x][y] == 0 or 2:
maze[x][y] = 1
dfs(x-1, y)
dfs(x, y-1)
dfs(x+1, y)
dfs(x, y+1)
dfs(start[0], start[1])
print("#" + str(t) + " " + ("1" if check else "0"))
๐ DFS ๋ฌธ์ ! (BFS ํ์ด๋ ์๋์ ์์ด์ฉ)
- ๋ฏธ๋ก ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ผ๋ฉด์ ์์์ง์ ์ ์ขํ๊ฐ๋ ํจ๊ป ์ฐพ์์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์์์ง์ ์ขํ๋ฅผ ์ธ์๋ก ๋ณด๋ด์ dfs๋ฅผ ์คํ์ํจ๋ค. - ์ขํ๊ฐ ํ์ํ ์ ์๊ฑฐ๋ ํ์ํ ํ์ ์๋ ์์น์ผ ๊ฒฝ์ฐ๋ฅผ ์์ธ์ฒ๋ฆฌํด์ค๋ค.
1) ๋ฏธ๋ก ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ
2) 1์ผ ๊ฒฝ์ฐ (๋ฒฝ์ด๊ฑฐ๋ ์ด๋ฏธ ์ง๋๊ฐ๋ ์๋ฆฌ์ธ ๊ฒฝ์ฐ)
3) check๊ฐ True์ธ ๊ฒฝ์ฐ (์ด๋ฏธ ๋์ฐฉ์ง์ ์ ๋๋ฌํ ์ ์๋ค๋ ๊ฒ ํ์ธ๋ ๊ฒฝ์ฐ) - ๊ทธ๋ฆฌ๊ณ ํด๋นํ๋ ์์น๊ฐ 3์ธ ๊ฒฝ์ฐ๋ ๋์ฐฉ ์ง์ ์ ๋๋ฌํ ๊ฒ์ด๋ฏ๋ก
check๋ฅผ True๋ก ๋ฐ๊ฟ์ ๋์ฐฉ์ ์ฑ๊ณตํ๋ค๋ ๊ฒ์ ํ์ํด์ฃผ๊ณ , ๋ฆฌํดํ๋ค. - ํด๋นํ๋ ์์น๊ฐ 0์ด๊ฑฐ๋(๋ฒฝ๋ ์๋๋ฉฐ ์ง๋๊ฐ์ง๋ ์์๋ ์๋ฆฌ), 2๋ผ๋ฉด(์์ ์ง์ )
๊ทธ ์๋ฆฌ๋ฅผ 1๋ก ์ฑ์์ฃผ์ด์ ๋ค์ ๋๊ฐ์ ์๋ฆฌ๋ฅผ ํ์ํ๋ ์ผ์ด ์๋๋ก ํด์ค๋ค. - ๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ขํ์ ์ํ์ข์ฐ ์์น์ ๋ํ ํ์์ ํ ์ ์๋๋ก dfsํจ์๋ฅผ ์ฌ๊ทํธ์ถํด์ค๋ค.
- dfsํจ์ ์ข ๋ฃ ํ์๋ check๊ฐ True์ธ์ง False์ธ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๊ฐ์ ์ถ๋ ฅํ๋ค.
BFS ๋ฌธ์ ํ์ด
import copy
from collections import deque
for _ in range(10):
t = int(input())
maze = [[] for _ in range(16)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
start = (0, 0)
for i in range(16):
now = list(map(int, list(input())))
if 2 in now:
tmp = now.index(2)
start = (i, tmp)
now[tmp] = 1 # ์์ ์ง์ ์ ๋ค์ ์ฌ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ฒ์๋ถํฐ 1๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
maze[i] = now
def bfs(deq):
while deq:
(x, y) = deq.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= 16 or ny >= 16 or maze[nx][ny] == 1:
continue
if maze[nx][ny] == 3:
return True
else:
maze[nx][ny] = 1
deq.append((nx, ny))
return False
deq = deque()
deq.append(start)
print("#" + str(t) + " " + str(1 if bfs(deq) else 0))
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ DFS๊ฐ ํจ์ฌ ํจ์จ์ ์ด์ง๋ง, BFS๋ ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ ํ์ดํด๋ณด์๋ค.
(์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฅด์ง๋ง ์ ์ฒด์ ์ธ ํ์ด ํ๋ฆ์ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋น)
๐ก ํผ๋๋ฐฑ
- ์ด๋ ต์ง ์์ ๋ฌธ์ ์์ง๋ง ์์ฆ ์๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์๊พธ ์ด์ํ ๊ณณ์์ ์ค์ํด์,,
์ค๋์๊ฐ ํค๋งค๊ณ ์๋ ์ํฉ์ด ๋ ๋ง์์ก๋ค.;; ์ ์ ์ฐจ๋ฆฌ๊ณ ํ์ ~~~
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] Contact SWEA #1238 (0) | 2022.07.12 |
---|---|
[Python Algorithm] ๋ณด๊ธ๋ก SWEA #1249 (0) | 2022.07.05 |
[Python Algorithm] ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด BOJ #11054 (0) | 2022.06.27 |
[Python Algorithm] ๋ ์ด์ ํต์ BOJ #6087 (0) | 2022.06.24 |
[Python Algorithm] ํ๋ก์ด๋ BOJ #11404 (0) | 2022.06.23 |
๋๊ธ