ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฐฑ์ค: 1600 ๋ง์ด ๋๊ณ ํ ์์ญ์ด
dirmathfl 2020. 9. 14. 22:11๋ฌธ์
1600๋ฒ: ๋ง์ด ๋๊ณ ํ ์์ญ์ด
์ฒซ์งธ ์ค์ ์ ์ K๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ๊ฒฉ์ํ์ ๊ฐ๋ก๊ธธ์ด W, ์ธ๋ก๊ธธ์ด H๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ H์ค์ ๊ฑธ์ณ W๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ง๋๋ฐ, 0์ ์๋ฌด๊ฒ๋ ์๋ ํ์ง, 1์ ์ฅ์ ๋ฌผ์ ๋ปํ๋ค. ์ฅ์ ๋ฌผ์ด ์๏ฟฝ๏ฟฝ
www.acmicpc.net
๋ฌธ์ ํ์ด
๋ฌธ์ ์์ ์์ญ์ด๋ K๋ฒ ๋์, ๋์ดํธ์ ์ด๋๊ณผ ๊ฐ์ด 8 ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ ๊ทธ ์ดํ์๋ ์, ํ, ์ข, ์ฐ ํ์นธ์ฉ ์์ง์ด๊ฒ ๋๋ค. ์ด๋, ์ต์์ ํ์๋ก ์ฐ์ธก ํ๋จ ์๋์ ์ขํ๋ก ๋์ฐฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์ด๋ ๋ฒฝ์ K๋ฒ ๋ถ์ ์ ์๋ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2์ ์ ์ฌํ ๋ก์ง์ผ๋ก ํ๋ฉด ๋๋ค.
- BFS๋ฅผ ํตํด, K๊ฐ ์๋ค๋ฉด ๋ง, ์์ญ์ด ์ฒ๋ผ ์ด๋๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
- K๊ฐ ์๋ค๋ฉด, ์์ญ์ด ์ฒ๋ผ ์ด๋๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
- ๋ง ์ฒ๋ผ ์ด๋ํ ํ์์ ๋ฐ๋ผ ๋ฐฉ๋ฌธ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํ์ฌ์ผ ํ๋ค.
- ์ด๋ฅผ ์ํด `visited`๋ฅผ x, y, ๋ง์ฒ๋ผ ์ด๋ํ ํ์๋ก ํ์ฌ 3์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ ๋ค.
- `visited`๋ ๋จ์ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์๋, ๊ธฐ์กด์ ๊ฒฝ๋ก์์ ํด๋น ๊ฒฝ๋ก๋ก ๋ฐฉ๋ฌธํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋์ ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y, next_k):
return 0 <= x < h and 0 <= y < w and not visited[x][y][next_k] and not graph[x][y]
def bfs(start):
q = deque([start])
horse_dirs = ((-1, 2), (1, 2), (2, 1), (2, - 1),
(1, -2), (-1, -2), (-2, -1), (-2, 1))
monkey_dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
while q:
x, y, cur_k = q.popleft()
if (x, y) == (h - 1, w - 1):
return visited[x][y][cur_k]
dirs = monkey_dirs + horse_dirs if cur_k > 0 else monkey_dirs
for idx, delta in enumerate(dirs):
next_x, next_y = x + delta[0], y + delta[1]
next_k = cur_k - 1 if idx > 3 else cur_k
if visitable(next_x, next_y, next_k):
q.append((next_x, next_y, next_k))
visited[next_x][next_y][next_k] = visited[x][y][cur_k] + 1
return -1
if __name__ == '__main__':
k = int(stdin.readline())
w, h = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(h)]
visited = [[[0] * (k + 1) for _ in range(w)]for _ in range(h)]
print(bfs((0, 0, k)))
3์ฐจ์ ๋ฐฐ์ด๋ก `visited`๋ฅผ ๋ง๋ค์ด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ๋ฐ๋ก ๋ ์ฌ๋ฆฌ์ง ๋ชปํ์ฌ, ์ด๋ฆฌ์ ๋ฆฌ ํค๋งค์ ์๊ฐ์ ์ข ์ป๋ค.๐
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 17141 ์ฐ๊ตฌ์ 2 (0) | 2020.09.17 |
---|---|
๋ฐฑ์ค: 3184 ์ (0) | 2020.09.15 |
๋ฐฑ์ค: 14395 4์ฐ์ฐ (0) | 2020.09.13 |
๋ฐฑ์ค: 10026 ์ ๋ก์์ฝ (0) | 2020.09.13 |
๋ฐฑ์ค: 11728 ๋ฐฐ์ด ํฉ์น๊ธฐ (0) | 2020.09.12 |