ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฐฑ์ค: 16954 ์์ง์ด๋ ๋ฏธ๋ก ํ์ถ
dirmathfl 2020. 8. 24. 16:35๋ฌธ์
๋ฌธ์ ํ์ด
8x8์ ์ฒด์คํ์ด ์์ ๋, ์ด 9๊ฐ์ง์ ๊ฒฝ์ฐ์ ์์ ๋ฐ๋ผ ์์ง์ผ ์ ์๋ค. ๊ฒฝ์ฐ์ ์๋ ์, ํ, ์ข, ์ฐ, ๋๊ฐ์ ๊ทธ๋ฆฌ๊ณ ํ์ฌ ์์น์ ๊ทธ๋๋ก ์๋ ๊ฒฝ์ฐ์ด๋ค. ๋ํ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ์ฒด์คํ์ด ์๋๋ก ์ด๋ํ์ฌ ๊ทธ๋ํ์ ์ํ๊ฐ ๋ณํํ๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ์์ ์ ๋ ฅ 2์ ๊ฒฝ์ฐ๋ 1์ด์ ์๊ฐ์ด ๊ฒฝ๊ณผํ๋ฉด์ ๋ฒฝ์ ์์น๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ๋ค.
current | after 1 sec
........ | ........
........ | ........
........ | ........
........ | ........
........ | ........
........ | ........
##...... | ........
........ | ##......
๋ฐ๋ผ์ ํ์ฌ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ํ์ฌ ์์น, ํ์ฌ ์์น์ ์ฐ์ธก ์นธ์ด๋ค. ํ์ง๋ง 1์ด ํ์๋ ํ์ฌ ์์น๋ค์ด ๋ฒฝ์ด ๋๋ฏ๋ก ๋ ์ด์ ์ด๋ํ ์ ์์ด, ์ค๋ฅธ์ชฝ ๋์ผ๋ก ์ด๋ํ ์ ์๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ BFS๋ฅผ ์ด์ฉํ ๊ทธ๋ํ ํ์๊ณผ ๋์ผํ๊ฒ ํ๋ ํ์ฌ ๋ฐฉ๋ฌธํ ์ง์ ์ด ๋ฒฝ์ด๋ผ๋ฉด ๋ ์ด์ ๊ฒฝ์ฐ์ ์์ ์ถ๊ฐํ์ง ์๋๋ก ํด์ผ ํ๋ค. ์ฌ๊ธฐ ๊น์ง๋ง ์๊ฐํ๊ณ ๋ฌธ์ ๋ฅผ ํ ๊ฒฝ์ฐ, 23%์ฏค์์ ํ๋ ธ์ต๋๋ค๋ฅผ ์ง๋ฉดํ ์ ์๋ค. ์ด๋ค ๋ถ๋ถ์ ์๋ตํ์์๊น ๊ณฐ๊ณฐ์ด ์๊ฐํด๋ณด๋, visited๋ฅผ ๊ทธ๋ํ๊ฐ ์ด๋ํ๋ค๋ฉด ์ด๊ธฐํํ๊ณ ๋ค์ ์ฒดํฌํด์ค์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ์๊ฐ์ ๋ฐ๋ผ ๊ทธ๋ํ๊ฐ ๋ณํํ๋ฉด ๋ค๋ฅธ ๊ทธ๋ํ์ด๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ํ์ฌ์ผ ํ๋ฏ๋ก visited๋ฅผ ๋ค๋ฅธ ๋ฌธ์ ๋ค๊ณผ ๊ฐ์ด ๊ณ์ ์ ์งํ๋ ๊ฒ์ด ์๋ ์ด๊ธฐํํด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y, visited):
return 0 <= x < 8 and 0 <= y < 8 \
and graph[x][y] == '.' and not visited[x][y]
def bfs(start):
q = deque([start])
dirs = ((0, 0),
# ์ํ์ข์ฐ
(0, 1), (0, -1), (1, 0), (-1, 0),
# ๋๊ฐ์
(1, 1), (1, -1), (-1, 1), (-1, -1))
while q:
# ๋ฒฝ์ด ์ด๋ํ ํ์, ๋ค์ ์ฒดํฌํด์ค์ผํ๋ค.
visited = [[False] * 8 for _ in range(8)]
for _ in range(len(q)):
cur_x, cur_y = q.popleft()
if [cur_x, cur_y] == [0, 7]:
return 1
if graph[cur_x][cur_y] == '#':
continue
for x, y in dirs:
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y, visited):
visited[next_x][next_y] = True
q.append([next_x, next_y])
# ํ์ ์๋๋ก ์ด๋
graph.pop()
graph.insert(0, ['.', '.', '.', '.', '.', '.', '.', '.'])
return 0
if __name__ == '__main__':
graph = [list(stdin.readline().strip()) for _ in range(8)]
print(bfs([7, 0]))
๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์์ ์ด๊ธฐ์ ์ ๋ ฅ๋ ๊ทธ๋ํ๋ฅผ ์ ์งํ ์ฑ๋ก ์๊ฐ์ ๋ฐ๋ผ x๋ฅผ x - time๊ณผ ๊ฐ์ด ์ง์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. ํ์ง๋ง ๋ฌธ์ ์์๋ `pop`, `insert`์ ์ค๋ฒํค๋๊ฐ ํฌ์ง ์์ผ๋ฏ๋ก, ํ์ ์ง์ ์ด๋์์ผฐ๋ค. ์์ฑํ ์ฝ๋๊ฐ ์ ๋ต์ ๋ฐ์ํ๋์ง ํ์ธํ๊ธฐ ์ํด, ํด๋น ํ ์คํธ ์ผ์ด์ค๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11048 ์ด๋ํ๊ธฐ (0) | 2020.08.25 |
---|---|
๋ฐฑ์ค: 14503 ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2020.08.24 |
๋ฐฑ์ค: 15558 ์ ํ ๊ฒ์ (0) | 2020.08.23 |
๋ฐฑ์ค: 2110 ๊ณต์ ๊ธฐ ์ค์น (0) | 2020.08.23 |
๋ฐฑ์ค: 2805 ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2020.08.22 |