ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ ์ด์ ์ ๋ ์ด์ ์ฌ์ด์ ํต์ ์ ํ๊ธฐ ์ํด ์ต์ํ์ ๊ฑฐ์ธ์ ์ค์นํ์ฌ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฑฐ์ธ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ ์ด์ ๊ฐ ๋ฐฉํฅ์ ๋ฐ๊พธ์ง ์๊ณ ์ต๋ํ ๋์๊ฐ ์ ์๋ ๊ฒฝ์ฐ์, ๋ฐฉํฅ์ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ ์๊ฐํ ์ ์๋ค.
- BFS๋ก ํ์์ ์์ํ๋ค.
- ๋ฐฉํฅ์ ๋ฐ๊พธ์ง ์๊ณ ๊ฐ ์ ์๋ ๊ฒฝ๋ก๋ค์ ์ต๋ํ ํ์ํ๋ค.
- ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๊ฑฐ๋, ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
- ๋ฐฉํฅ์ด ๋ฐ๋๊ฒ ๋๋ค๋ฉด ๊ธฐ์กด์ ๋ฐฉํฅ์ ๋ฐ๊พธ์ง ์๊ณ ์ต๋ํ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์์ +1 ํ๋ค.
- ์ฆ, ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋์ด `๊ฑฐ์ธ ํ๋๋ฅผ ์ค์น`ํ๊ฒ ๋๋ค.
- ๋ค๋ฅธ ๋ ์ด์ ์ ๋๋ฌํ ๋ ๊ฐ์ง, ์์ ๋ก์ง์ ๋ฐ๋ณตํ๋ฉด `์ต์ ๊ฑฐ์ธ์ ๊ฐ์`๋ฅผ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
from collections import deque
from math import inf
def visitable(x, y):
return 0 <= x < h and 0 <= y < w
def bfs():
q = deque([start])
visited[start[X]][start[Y]] = 0
while q:
x, y = q.popleft()
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
while visitable(next_x, next_y) and graph[next_x][next_y] != '*':
if visited[next_x][next_y] < visited[x][y] + 1:
break
q.append((next_x, next_y))
visited[next_x][next_y] = visited[x][y] + 1
next_x += dx
next_y += dy
return visited[end[X]][end[Y]] - 1
if __name__ == "__main__":
X, Y = 0, 1
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
w, h = map(int, stdin.readline().split())
graph = [list(stdin.readline().rstrip()) for _ in range(h)]
visited = [[inf] * w for _ in range(h)]
laser = []
for i in range(h):
for j in range(w):
if graph[i][j] == 'C':
laser.append([i, j])
start, end = laser
print(bfs())
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1717 ์งํฉ์ ํํ (0) | 2020.10.20 |
---|---|
๋ฐฑ์ค: 16916 ๋ถ๋ถ ๋ฌธ์์ด (0) | 2020.10.19 |
๋ฐฑ์ค: 16234 ์ธ๊ตฌ ์ด๋ (0) | 2020.10.17 |
๋ฐฑ์ค: 17143 ๋์์ (0) | 2020.10.15 |
๋ฐฑ์ค: 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2020.10.14 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ