๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 16469๋ฒ
ํ์ด ๊ณผ์
๋์ด, ์ค์์ค, ์ฐฝ๋ชจ
์ธ ์ฌ๋์ ์ขํ๊ฐ ์ฃผ์ด์ง ๋ ๋ง๋ฏธ์
์ด ์์นํ ์ ์๋ ์ขํ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
๋งจ ์ฒ์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ง๋ฏธ์
์ ์ธ ์ฌ๋์ด ๋ชจ์ผ ์ ์๋ ํ ์ขํ๊น์ง์ ๊ฑฐ๋ฆฌ ๊ฐ์ด ๊ฐ์ฅ ์งง์ ๊ณณ์ ์์นํ๊ธฐ ๋๋ฌธ์
์ด๋ฅผ ์ํด์ ๊ฐ ์ ์ ๋ํด์ ๋ค์ต์คํธ๋ผ
์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๊ฐ O(V^2*ElogV)
์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์๊ณ , ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก์ ์ ๊ทผ์ด ํ์ํ์ต๋๋ค.
์๊ฐํด๋ณด๋ฉด ๋ชจ๋ ์ขํ์์ ๋ค์ต์คํธ๋ผ
๋ฅผ ์ํํ ํ์ ์์ด ๊ทธ๋ฅ ๋์ด, ์ค์์ค, ์ฐฝ๋ชจ
์ธ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ํ์์ ์ํํ ๋ค์,
๊ฐ ์ขํ๋ค์ ๋ํด์ ๊ฑฐ๋ฆฌ ์ต๋๊ฐ๋ผ๋ฆฌ ๋น๊ตํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๊ทธ๋ฅ BFS
๋ฅผ ์ด์ฉํด์ ์ธ ์ฌ๋์ ์์์ง์ ์ผ๋ก ํ๋ ํ์์ ์ํํ๊ณ , ๊ฑฐ๋ฆฌ ๊ฐ์ dist
3์ฐจ์ ๋ฐฐ์ด์ ๊ธฐ๋กํ์ต๋๋ค.๋์ด, ์ค์์ค, ์ฐฝ๋ชจ
๊ฐ๊ฐ์ 0, 1, 2
๋ผ๋ id ๊ฐ์ผ๋ก ๊ตฌ๋ถํด์คฌ์ต๋๋ค.
์ฝ๋
import sys
from collections import deque
R, C = list(map(int, sys.stdin.readline().split()))
maze = [list(sys.stdin.readline().strip()) for _ in range(R)]
nucksal = list(map(int, sys.stdin.readline().split()))
swings = list(map(int, sys.stdin.readline().split()))
changmo = list(map(int, sys.stdin.readline().split()))
dr = [0, 0, 1, -1]
dc = [1, -1, 0, 0]
def in_range(r, c):
return 0 <= r < R and 0 <= c < C
def bfs(id, r, c, dist):
visit = [[0] * C for _ in range(R)]
q = deque()
dist[r][c][id] = 0
visit[r][c] = 1
q.append([r, c, 0])
while q:
r, c, cost = q.popleft()
for i in range(4):
nr, nc = r + dr[i], c + dc[i]
if in_range(nr, nc) and not visit[nr][nc] and maze[nr][nc] == '0':
dist[nr][nc][id] = cost + 1
visit[nr][nc] = 1
q.append([nr, nc, cost + 1])
return sys.maxsize
def solution():
dist = [[[-1] * 3 for _ in range(C)] for _ in range(R)]
for id, [r, c] in enumerate([nucksal, swings, changmo]):
bfs(id, r - 1, c - 1, dist)
min_cost, count = sys.maxsize, 0
for r in range(R):
for c in range(C):
if all(map(lambda x: x != -1, dist[r][c])):
cost = max(dist[r][c])
if cost < min_cost:
min_cost = cost
count = 1
elif cost == min_cost:
count += 1
if min_cost != sys.maxsize:
print(min_cost, count, sep='\n')
else:
print(-1)
solution()
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 8972 - ๋ฏธ์น ์๋์ด๋ ธ (0) | 2021.03.08 |
---|---|
BOJ 19941 - ํ๋ฒ๊ฑฐ ๋ถ๋ฐฐ (0) | 2021.03.08 |
BOJ 13565 - ์นจํฌ (0) | 2021.03.05 |
BOJ 1105 - ํ (0) | 2021.03.03 |
BOJ 16509 - ์ฅ๊ตฐ (0) | 2021.03.03 |
๐ฌ ๋๊ธ