ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฐฑ์ค: 16933 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 3
dirmathfl 2020. 8. 4. 21:15๋ฌธ์
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ ๋ฌธ์ ์ธ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 ๋ฌธ์ ์์ ๋ฎ์๋ง ๋ฒฝ์ ๋ถ์ ์ ์๊ณ , ๋ฐค์๋ ๋ฒฝ์ ๋ถ์ ์ ์๋ค๋ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ํ ๋งํ ๋ฌธ์ ์ ๊ฐ์ด ํ๋ฃจ์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฒ๋ฆฌํ์ฌ์ผ ํ๋ฏ๋ก, day 2 ์ถ๊ฐ๋ ๊ฒฝ์ฐ์ ์๊ฐ 3์ด๋ผ๋ฉด ํ๋ฃจ ๋์ ์ฒ๋ฆฌ ๋๋๋ก ํ์ฌ์ผ ํ๋ค. ์ด๋ ํ์ ๊ธธ์ด๋งํผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฝ๋
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))
day = 1
while q:
night = False if day > 0 else True
for _ in range(len(q)):
cur_x, cur_y, wall = q.popleft()
today = abs(day)
if [cur_x, cur_y] == [n - 1, m - 1]:
return today
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] = today + 1
q.append((next_x, next_y, wall))
elif wall < k and not visited[next_x][next_y][wall + 1]:
if not night:
visited[next_x][next_y][wall + 1] = today + 1
q.append((next_x, next_y, wall + 1))
else:
q.append((cur_x, cur_y, wall))
day = day + 1 if day > 0 else day - 1
day *= -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)))
๋ฎ๊ณผ ๋ฐค์ ํ์ฌ ๋ ์ง๊ฐ ์์์ด๋ฉด ๋ฎ, ์์์ด๋ฉด ๋ฐค์ผ๋ก ๊ตฌ๋ถํ๋๋ก ํ์๋ค. ์ด ๋ฌธ์ ์ญ์ ํ์ด์ฌ์ผ๋ก๋ ํต๊ณผํ์ง ๋ชปํ๋ฉฐ PyPy3๋ก ์ ์ถํ์ฌ์ผ ํ๋ค. 17%์์ ๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋์ ํ์ธํด ๋ณด๋, ๋ฒฝ์ธ ๊ฒฝ์ฐ์ ์ฌ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ง ์์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค.
์ต๋ํ ์กฐ๊ฑด ํ๋จ์ ์ค์ด๊ณ , ์ด๋ฆฌ์ ๋ฆฌ ์์ ํ ๊ฒฐ๊ณผ ์ด๊ธฐ์ ์์ฑํ์์ ๋ ๋ณด๋ค, ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16198 ์๋์ง ๋ชจ์ผ๊ธฐ (0) | 2020.08.06 |
---|---|
๋ฐฑ์ค: 2580 ์ค๋์ฟ (0) | 2020.08.05 |
๋ฐฑ์ค: 14442 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2020.08.03 |
๋ฐฑ์ค: 2206 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2020.08.03 |
๋ฐฑ์ค: 14502 ์ฐ๊ตฌ์ (0) | 2020.08.03 |