ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป ์ฝ๋ฉํ
์คํธ/๋ฐฑ์ค
๋ฐฑ์ค: 14442 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2
dirmathfl 2020. 8. 3. 19:31728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ๋ฌธ์ ์์ ๊ฒฝ์ฐ์ ์๊ฐ K๋ก ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ํด๋น ๋ฌธ์ ์์๋ ์ ๋ ฅ๋๋ K์ ๋ฐ๋ผ ๋ฒฝ์ ๋ถ ์ ์ ์๋ ํ์๊ฐ ์ฆ๊ฐํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ฒฝ์ฐ์ ์๋ ๋ฒฝ์ ๋ถ์ ํ์๊ฐ (0, 1, ... K)๋ก ์ฆ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ์ฝ๋์์ K์ ๋ํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ํด๊ฒฐ ํ ์ ์๋ค. (๋จ, PyPy3๋ก ์ ์ถํ์ฌ์ผ ์๊ฐ ๋ด์ ํต๊ณผํ ์ ์๋ค.)
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y, w):
return 0 <= x < n and 0 <= y < m and not visited[x][y][w]
def bfs(start):
q = deque([start])
dirs = ((-1, 0), (0, 1), (1, 0), (0, -1))
while q:
cur_x, cur_y, wall = q.popleft()
dist = visited[cur_x][cur_y][wall] + 1
if [cur_x, cur_y] == [n - 1, m - 1]:
return visited[cur_x][cur_y][wall]
for x, y in dirs:
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y, wall):
if not graph[next_x][next_y]:
visited[next_x][next_y][wall] = dist
q.append((next_x, next_y, wall))
elif wall < k:
visited[next_x][next_y][wall + 1] = dist
q.append((next_x, next_y, wall + 1))
return -1
if __name__ == '__main__':
n, m, k = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().strip())) for _ in range(n)]
visited = [[[0] * (k + 1) for _ in range(m)] for _ in range(n)]
visited[0][0] = [1] * (k + 1)
print(bfs((0, 0, 0)))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2580 ์ค๋์ฟ (0) | 2020.08.05 |
---|---|
๋ฐฑ์ค: 16933 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 3 (0) | 2020.08.04 |
๋ฐฑ์ค: 2206 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2020.08.03 |
๋ฐฑ์ค: 14502 ์ฐ๊ตฌ์ (0) | 2020.08.03 |
๋ฐฑ์ค: 16948 ๋ฐ์ค ๋์ดํธ (0) | 2020.08.02 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ