ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ณ ์ด๋์น(S)๊ฐ ๋น๋ฒ์ ๊ตด(D)๋ก ํ์ถ ํ ์ ์๋์ง๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ค๋ฅธ ๊ทธ๋ํ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ ์๊ฐ์ ๋ฐ๋ผ ๋ฌผ(*)์ด ๋น์ด ์๋ ์นธ์ผ๋ก ํ์ฅํ๋ ๊ฒ์ด๋ค. ๊ฐ๋งํ ๋ค์ฌ๋ค ๋ณด๋ฉด ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋๊ณ , ๋ค์๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
-
์๊ฐ์ ๋ฐ๋ผ ๋ฌผ์ด ํ์ฅํ๋ ๊ฒฝ์ฐ
- ๋ฌผ์ด ํ์ฅ ํ๋ ๊ฒ์ ํ ๋งํ ์ ๋ก์ง๊ณผ ๊ฐ์ด ๊ตฌํํ๋ฉด ๋ฌผ์ด ํผ์ง๋ ์ํฉ์ ๊ตฌํ ํ ์ ์๋ค.
-
๊ณ ์ด ๋์น๊ฐ ๋น๋ฒ ๊ตด๋ก ๊ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ๋ค๋ฅธ ๊ทธ๋ํ ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก BFS๋ฅผ ํตํด ์, ํ, ์ข, ์ฐ๋ก ํ์ํ๋ฉด ๋๋ค.
- ํ๋ฃจ ๋์ ์ผ์ด ๋ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์, ์, ํ, ์ข, ์ฐ ์ค ์ ๊ทผ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ด ์ฒ๋ฆฌํ์ฌ์ผ ํ๋ค.
์ฆ, ์ด๋ ต๊ฒ ์๊ฐํ ํ์ ์์ด ๋ฌผ์ด ํ์ฅํ๋ ๊ฒ ๊ทธ๋ํ๋ฅผ ๋ง๋ค๋ฉด์ ๊ณ ์ด ๋์น๊ฐ ํ์ถ ๊ฐ๋ฅํ์ง ํ๋จํ๋ฉด ๋๋ 2๋ฒ์ BFS ํ์์ด ํ์ํ ๋ฌธ์ ์ด๋ค.
์ฝ๋
from collections import deque
from sys import stdin
def visitable(x, y):
return 0 <= x < n and 0 <= y < m
def bfs(start):
flood()
q = deque([start])
while q:
for _ in range(len(q)):
cur_x, cur_y = q.popleft()
for x, y in dirs:
next_x = cur_x + x
next_y = cur_y + y
if visitable(next_x, next_y):
if graph[next_x][next_y] == '.' \
and not visited[next_x][next_y]:
visited[next_x][next_y] = visited[cur_x][cur_y] + 1
q.append([next_x, next_y])
elif graph[next_x][next_y] == 'D':
return visited[cur_x][cur_y]
flood()
return "KAKTUS"
def flood():
for _ in range(len(water)):
cur_x, cur_y = water.popleft()
for x, y in dirs:
next_x = cur_x + x
next_y = cur_y + y
if visitable(next_x, next_y) and graph[next_x][next_y] == '.':
graph[next_x][next_y] = '*'
water.append([next_x, next_y])
if __name__ == '__main__':
X, Y = 0, 1
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
n, m = map(int, input().split())
graph = []
visited = [[0] * m for _ in range(n)]
water = deque()
for i in range(n):
graph.append(list(stdin.readline().strip()))
if 'S' in graph[i]:
start = [i, graph[i].index('S')]
visited[start[X]][start[Y]] = 1
elif '*' in graph[i]:
water.append([i, graph[i].index('*')])
print(bfs(start))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2003 ์๋ค์ ํฉ 2 (0) | 2020.08.13 |
---|---|
๋ฐฑ์ค: 2225 ํฉ๋ถํด (0) | 2020.08.12 |
๋ฐฑ์ค: 15644 ๊ตฌ์ฌ ํ์ถ 3 (0) | 2020.08.08 |
๋ฐฑ์ค: 13459 ๊ตฌ์ฌ ํ์ถ (0) | 2020.08.07 |
๋ฐฑ์ค: 1987 ์ํ๋ฒณ (0) | 2020.08.06 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ