๐น ์์ดํ ์ค๊ธฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from collections import deque
ground = [[0] * 102 for i in range(102)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def solution(rectangle, characterX, characterY, itemX, itemY):
# ์บ๋ฆญํฐ, ์์ดํ
์ขํ 2๋ฐฐ๋ก ๋๋ฆฌ๊ธฐ
cx, cy, ix, iy = characterX*2, characterY*2, itemX*2, itemY*2
# ์ขํ ์ง์ฌ๊ฐํ ํ์
for r in rectangle:
# ์ขํ๋ฅผ 2๋ฐฐ๋ก ๋๋ฆฌ๊ธฐ
x1, y1, x2, y2 = map(lambda x: x*2, r)
for i in range(x1, x2+1):
for j in range(y1, y2+1):
# ์ง์ฌ๊ฐํ ๋ด๋ถ 2๋ก ์ฑ์ฐ๊ธฐ
if x1 < i < x2 and y1 < j < y2:
ground[i][j] = 2
# ํ
๋๋ฆฌ 1๋ก ์ฑ์ฐ๊ธฐ
elif ground[i][j] != 2:
ground[i][j] = 1
q = deque([(cx, cy)])
distance = [[1] * 102 for i in range(102)]
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ๋ฒ์ ๋ฐ์ผ๋ก ๋๊ฐ ์ ์ฌํ์
if nx < 0 or nx > 101 or ny < 0 or ny > 101:
continue
# ํ
๋๋ฆฌ์ ํฌํจ๋๋ฉด์ ๋ฐฉ๋ฌธ ์ ํ์ ๊ฒฝ์ฐ
if ground[nx][ny] == 1 and distance[nx][ny] == 1:
distance[nx][ny] = distance[x][y] + 1
q.append((nx, ny))
return distance[ix][iy] // 2
์ ํ์ฑ
ํ ์คํธ 1 ใ ํต๊ณผ (0.10ms, 10.5MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.15ms, 10.5MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.15ms, 10.4MB) ํ ์คํธ 4 ใ ํต๊ณผ (0.10ms, 10.4MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.11ms, 10.4MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.10ms, 10.4MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.18ms, 10.4MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.19ms, 10.6MB) ํ ์คํธ 9 ใ ํต๊ณผ (1.12ms, 10.4MB) ํ ์คํธ 10 ใ ํต๊ณผ (1.23ms, 10.4MB) ํ ์คํธ 11 ใ ํต๊ณผ (1.10ms, 10.4MB) ํ ์คํธ 12 ใ ํต๊ณผ (1.18ms, 10.4MB) ํ ์คํธ 13 ใ ํต๊ณผ (2.02ms, 10.4MB) ํ ์คํธ 14 ใ ํต๊ณผ (0.67ms, 10.6MB) ํ ์คํธ 15 ใ ํต๊ณผ (0.45ms, 10.5MB) ํ ์คํธ 16 ใ ํต๊ณผ (0.77ms, 10.4MB) ํ ์คํธ 17 ใ ํต๊ณผ (0.72ms, 10.5MB) ํ ์คํธ 18 ใ ํต๊ณผ (0.78ms, 10.4MB) ํ ์คํธ 19 ใ ํต๊ณผ (1.22ms, 10.4MB) ํ ์คํธ 20 ใ ํต๊ณผ (1.39ms, 10.4MB) ํ ์คํธ 21 ใ ํต๊ณผ (1.43ms, 10.6MB) ํ ์คํธ 22 ใ ํต๊ณผ (0.56ms, 10.4MB) ํ ์คํธ 23 ใ ํต๊ณผ (1.09ms, 10.5MB) ํ ์คํธ 24 ใ ํต๊ณผ (0.73ms, 10.4MB) ํ ์คํธ 25 ใ ํต๊ณผ (0.24ms, 10.4MB) ํ ์คํธ 26 ใ ํต๊ณผ (0.27ms, 10.4MB) ํ ์คํธ 27 ใ ํต๊ณผ (0.29ms, 10.5MB) ํ ์คํธ 28 ใ ํต๊ณผ (0.30ms, 10.5MB) ํ ์คํธ 29 ใ ํต๊ณผ (0.47ms, 10.5MB) ํ ์คํธ 30 ใ ํต๊ณผ (0.57ms, 10.5MB)
3. ํด์ค
bfs๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
์ขํ์์ ํ ๋๋ฆฌ๋ฅผ 1, ์ง์ฌ๊ฐํ ๋ด๋ถ๋ฅผ 2๋ก ์ด๊ธฐํ ํด์ค๋ค. ๊ฒน์น๋ ๋ด๋ถ๋ 2๋ก ์ด๊ธฐํํด์ค๋ค.
์ด๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ํ ๋๋ฆฌ๋ฅผ ์นธ ๋ด๋ถ์ ํ์ํ๋ค ๋ณด๋ ์ค์ ์ด์ด์ ธ ์์ง ์์ ๊ธธ์ด ์ด์ด์ง ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค.
์์ ๊ฐ์ ๊ฒฝ์ฐ์ ํ๋ ์นธ์ ์ค์ ์ด์ด์ง์ง ์์ ์ค์ด์ง๋ง bfs๋ก ํ์ํ๋ค๋ณด๋ฉด ์ฐ๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ฌ ํ์ํ๋ค. ๋ฐ๋ผ์ ์ค์ ๋ต๋ณด๋ค ๋ ์์ ๊ฐ์ด ๋์จ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค์ ํฌ๊ธฐ์ 2๋ฐฐ๋ก ๊ณ์ฐ์ ํด์ค๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ํด๋น ๊ฒฝ์ฐ์ฒ๋ผ ๊ธธ์ด ๋ถ์ด์๋ ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊ทธ ํ bfs๋ฅผ ๋๋ฉฐ ํ ๋๋ฆฌ๋ฅผ ๋ฐ๋ผ ํ์ํด์ค๋ค. ์์ดํ ์์น์ distance ๊ฐ์ ๋ฆฌํดํ ๋ 2๋ฐฐ๋ก ํด์ฃผ์๊ธฐ ๋๋ฌธ์ 2๋ก ๋๋์ด ๋ฆฌํดํ๋ค.