๐ ๋ฐฑ์ค 16236 ์๊ธฐ ์์ด python ๐
๐ค ๋ฌธ์ ํ์ด ๐ค
์ฒซ๋ฒ์งธ ์๋์์ ์ ํํ ๊ตฌํํ์ง ๋ชปํ๊ณ ์ธํฐ๋ท์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
๋ด๊ฐ ์ด ๋ฌธ์ ์์ ๋์น ํฌ์ธํธ๋
- ์ฒ์ ์๊ธฐ์์ด์ ์์น๋ฅผ ์ ์ฅํ ํ ๋งต์์ ์๊ธฐ์์ด ์์น๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ์ง ์์๋ค. (ํฌ๊ธฐ๊ฐ 9์ธ ์์ด๋ก ์ธ์ํ๊ฒ ๋จ)
- BFS๊ฐ ์ฌ์ฉํ๋ queue์ ์์ฑ์ ์ด์ฉํด ๋จน์ ์ ์๋ ์์ด๋ฅผ ์ฐพ์ ํ์๊น์ง๋ง ํ์์ ์ํํ๋๋ก ํ๋ค. (count > flag: break)
- ์ต์ ์ด๋ํ์์์ ๋จน์ ์ ์๋ ๋ชจ๋ ๋ฌผ๊ณ ๊ธฐ์ ์์น๋ฅผ queue์๋ ๋ค๋ฅธ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- ๋งจ์ ์ผ์ชฝ ๋งจ ๋์ ์์นํ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จผ์ ๋จน๋๋ค๋ ๊ฒ์ (์ธ๋ก, ๊ฐ๋ก) ์์๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ๋ผ๋ ๋ป์ด๋ค.
์ด ํฌ์ธํธ๋ค์ ์กฐ๊ธ ๋ ์ ๊ฒฝ์ฐ๋ฉด ๊ตฌํ์ ์ฝ๊ฒ ํ ์ ์๋ค.
โจ๏ธ ์ฝ๋ โจ๏ธ
from collections import deque
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
sx, sy = 0, 0
for i in range(n):
for j in range(n):
if arr[i][j] == 9:
arr[i][j] = 0
sx, sy = i, j
break
size = 2
move_num = 0
eat = 0
while True:
q = deque()
q.append((sx, sy, 0))
visited = [[False] * n for _ in range(n)]
flag = 1e9
fish = []
while q:
x, y, count = q.popleft()
if count > flag:
break
for k in range(4):
nx, ny = x + dx[k], y + dy[k]
if nx < 0 or ny < 0 or nx >= n or ny >= n:
continue
if arr[nx][ny] > size or visited[nx][ny]:
continue
if arr[nx][ny] != 0 and arr[nx][ny] < size:
fish.append((nx, ny, count + 1))
flag = count
visited[nx][ny] = True
q.append((nx, ny, count + 1))
if len(fish) > 0:
fish.sort()
x, y, move = fish[0][0], fish[0][1], fish[0][2]
move_num += move
eat += 1
arr[x][y] = 0
if eat == size:
size += 1
eat = 0
sx, sy = x, y
else:
break
print(move_num)
Reference
'๐ช๐ป์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค & ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌํ, ์๋ฎฌ๋ ์ด์ ] 20061 : ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2 python (0) | 2021.04.07 |
---|---|
[DP] ๋ฐฑ์ค 11058 ํฌ๋ฆฌ๋ณด๋ python (0) | 2021.04.03 |
[DP] ๋ฐฑ์ค 1699 ์ ๊ณฑ์์ ํฉ python (1) | 2021.04.01 |
[DP] ๋ฐฑ์ค 2133 ํ์ผ์ฑ์ฐ๊ธฐ python (0) | 2021.04.01 |