ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
NxN ์ ์ฌ๊ฐ ๋ณด๋๊ฐ ์์ ๋, ์ด๊ธฐ์ ๋ฑ์ ๊ธธ์ด๋ 1์ด๊ณ ๋ฑ์ ์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ค. ์ด๋ ๋ฑ์ ์ฌ๊ณผ๋ฅผ ๋จน๊ฒ ๋๋ฉด ๋ชธ์ ๊ธธ์ด๊ฐ 1 ์ฆ๊ฐํ๊ณ , ์๋ ๊ฒฝ์ฐ๋ ๊ธธ์ด๊ฐ ๊ทธ๋๋ก ์ ์ง๋๊ณ ์ด๋ํ๋ค. ๋ํ ํน์ ์๊ฐ ์ด ํ์ ์ ํํ๋ ๋ฐฉํฅ 'L', 'D'๊ฐ ์ฃผ์ด์ง๋๋ฐ L์ธ ๊ฒฝ์ฐ ์ผ์ชฝ, D์ธ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ผ๋ก 90๋ ํ์ ํ๋ค. ์ด์ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฑ ๊ฒ์์ ๋ช ์ด ๋์ ์ํํ ์ ์๋์ง ๋ฐํํ์ฌ์ผ ํ๋ค.
๋ฌธ์ ๋ BFS๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ด ํ์ํ๋ฉด ๋๋ค.
- ๋ฑ์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ฏ๋ก (0, 0)์์ (0, 1)์ ๋ํ๊ฐ๋ฉฐ ํ์์ ์งํํ๋ค.
- ํน์ ์๊ฐ ์ด๊ฐ ๋๋ฉด, 'L', 'D'์ ๋ฐ๋ผ ์ ํํ ๋ฐฉํฅ์ ์ ํํ๊ณ ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์์ ์งํํ๋ค.
- ๋ฑ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ค์ ๋ง๋๊ฑฐ๋, NxN ์ ์ฌ๊ฐ ๋ณด๋ ๋ฐ์ผ๋ก ๋๊ฐ ๊ฒฝ์ฐ ๊ฒ์์ด ์ค๋จ ๋๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def change_dir(cur_dir, change):
return (cur_dir - 1 if change == 'L' else cur_dir + 1) % 4
def visitable(x, y):
return 0 <= x < n and 0 <= y < n and graph[x][y] != SNAKE
def bfs(start):
q = deque([start])
time = 0
cur_dir = 0
x, y = 0, 0
graph[x][y] = SNAKE
while True:
if move and move[-1][0] == time:
cur_dir = change_dir(cur_dir, move.pop()[1])
next_x, next_y = x + dirs[cur_dir][0], y + dirs[cur_dir][1]
time += 1
if visitable(next_x, next_y):
if graph[next_x][next_y] == APPLE:
graph[next_x][next_y] = SNAKE
q.append((next_x, next_y))
elif graph[next_x][next_y] == EMPTY:
graph[next_x][next_y] = SNAKE
q.append((next_x, next_y))
tail_x, tail_y = q.popleft()
graph[tail_x][tail_y] = EMPTY
x, y = next_x, next_y
else:
break
return time
if __name__ == '__main__':
EMPTY, SNAKE, APPLE = 0, 1, 2
n = int(stdin.readline())
graph = [[0] * n for _ in range(n)]
dirs = [[0, 1], [1, 0], [0, -1], [-1, 0]]
move = []
for _ in range(int(stdin.readline())):
i, j = map(int, stdin.readline().split())
graph[i - 1][j - 1] = APPLE
for _ in range(int(stdin.readline())):
move_time, move_dir = stdin.readline().split()
move.append([int(move_time), move_dir])
move = move[::-1]
print(bfs([0, 0]))
`deque`๋ฅผ ํ์ฉํ์ฌ ๋ฑ์ ๊ธธ์ด๋ฅผ ์ ์งํ๋ฉด์ ํ์์ ์งํํ๋ค. ์ฌ๊ณผ๋ฅผ ๋จน์ง ๋ชปํ ๊ฒฝ์ฐ ๋ฑ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ (`q.popleft`), ์ฌ๊ณผ๋ฅผ ๋จน์ ๊ฒฝ์ฐ ๋ฑ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฐ๋ค. ๋ํ, ๋ฑ์ ๋จธ๋ฆฌ๊ฐ ๊ผฌ๋ฆฌ๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด, ๋ณด๋์ ๊ฐ์ ๋ฑ์ผ๋ก ์์ ํ์ฌ ํ์ธํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.๐
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2020.09.23 |
---|---|
๋ฐฑ์ค: 14890 ๊ฒฝ์ฌ๋ก (0) | 2020.09.22 |
๋ฐฑ์ค: 4811 ์์ฝ (0) | 2020.09.19 |
๋ฐฑ์ค: 17142 ์ฐ๊ตฌ์ 3 (0) | 2020.09.17 |
๋ฐฑ์ค: 17141 ์ฐ๊ตฌ์ 2 (0) | 2020.09.17 |