๐ข ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
"""
๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ
๐ ๋ฌธ์
๊ฐ๋ฐ์๋ฅผ ํฌ๋งํ๋ ์ฃ ๋ฅด๋๊ฐ ์นด์นด์ค์ ๋ฉด์ ์ ๋ณด๋ฌ ์์ต๋๋ค.
์ฝ๋ก๋ ๋ฐ์ด๋ฌ์ค ๊ฐ์ผ ์๋ฐฉ์ ์ํด ์์์๋ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌ์ ๋๊ธฐ๋ฅผ ํด์ผํ๋๋ฐ
๊ฐ๋ฐ ์ง๊ตฐ ๋ฉด์ ์ธ ๋งํผ ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๋๊ธฐ์ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ณ ์๋๋ก ์๋ดํ๊ณ ์์ต๋๋ค.
๋๊ธฐ์ค์ 5๊ฐ์ด๋ฉฐ, ๊ฐ ๋๊ธฐ์ค์ 5x5 ํฌ๊ธฐ์
๋๋ค.
๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ํ์ฌ ์์์๋ค ๋ผ๋ฆฌ๋ ๋งจํดํผ ๊ฑฐ๋ฆฌ1๊ฐ 2 ์ดํ๋ก ์์ง ๋ง์ ์ฃผ์ธ์.
๋จ ์์์๊ฐ ์์์๋ ์๋ฆฌ ์ฌ์ด๊ฐ ํํฐ์
์ผ๋ก ๋งํ ์์ ๊ฒฝ์ฐ์๋ ํ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด,
์ ๊ทธ๋ฆผ์ฒ๋ผ ์๋ฆฌ ์ฌ์ด์ ํํฐ์
์ด ์กด์ฌํ๋ค๋ฉด ๋งจํดํผ ๊ฑฐ๋ฆฌ๊ฐ 2์ฌ๋ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํจ ๊ฒ์
๋๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ํํฐ์
์ ์ฌ์ด์ ๋๊ณ ์์ ๊ฒฝ์ฐ๋ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํจ ๊ฒ์
๋๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ์๋ฆฌ ์ฌ์ด๊ฐ ๋งจํดํผ ๊ฑฐ๋ฆฌ 2์ด๊ณ ์ฌ์ด์ ๋น ํ
์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ๋ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค์ง ์์ ๊ฒ์
๋๋ค.
์์์๊ฐ ์์์๋ ์๋ฆฌ(P)๋ฅผ ์๋ฏธํฉ๋๋ค.
๋น ํ
์ด๋ธ(O)์ ์๋ฏธํฉ๋๋ค.
ํํฐ์
(X)์ ์๋ฏธํฉ๋๋ค.
5๊ฐ์ ๋๊ธฐ์ค์ ๋ณธ ์ฃ ๋ฅด๋๋ ๊ฐ ๋๊ธฐ์ค์์ ์์์๋ค์ด ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ ๊ธฐํค๊ณ ์๋์ง ์๊ณ ์ถ์ด์ก์ต๋๋ค.
์๋ฆฌ์ ์์์๋ ์์์๋ค์ ์ ๋ณด์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋๊ธฐ์ค๋ณ๋ก ๋ด์ 2์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด places๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
๊ฐ ๋๊ธฐ์ค๋ณ๋ก ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช
์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๐งก ์ ํ ์ฌํญ
places์ ํ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ์) = 5
places์ ๊ฐ ํ์ ํ๋์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋ํ๋
๋๋ค.
places์ ์ด ๊ธธ์ด(๋๊ธฐ์ค ์ธ๋ก ๊ธธ์ด) = 5
places์ ์์๋ P,O,X๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์
๋๋ค.
places ์์์ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ๋ก ๊ธธ์ด) = 5
P๋ ์์์๊ฐ ์์์๋ ์๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
O๋ ๋น ํ
์ด๋ธ์ ์๋ฏธํฉ๋๋ค.
X๋ ํํฐ์
์ ์๋ฏธํฉ๋๋ค.
์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ 5๊ฐ ๋๊ธฐ์ค์ ํฌ๊ธฐ๋ ๋ชจ๋ 5x5 ์
๋๋ค.
return ๊ฐ ํ์
1์ฐจ์ ์ ์ ๋ฐฐ์ด์ 5๊ฐ์ ์์๋ฅผ ๋ด์์ return ํฉ๋๋ค.
places์ ๋ด๊ฒจ ์๋ 5๊ฐ ๋๊ธฐ์ค์ ์์๋๋ก, ๊ฑฐ๋ฆฌ๋๊ธฐ ์ค์ ์ฌ๋ถ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ต๋๋ค.
๊ฐ ๋๊ธฐ์ค ๋ณ๋ก ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช
์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ด์ต๋๋ค.
๐ ์
์ถ๋ ฅ
places result
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], [1, 0, 1, 1, 1]
["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"],
["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"],
["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"],
["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]]
"""
from collections import deque
# bfs(p, [i, j, 0])
# ๋๊ธฐ์ค ๊ฐ๋ก ๊ธธ์ด, [places ํ, places ์ด, ๊ฑฐ๋ฆฌ]
def bfs(p, q):
queue = deque([q])
visited = [[False] * 5 for _ in range(5)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
while queue:
x, y, d = queue.popleft()
# ์์์ ์๋ฆฌ
visited[x][y] = True
# ์ฃผ๋ณ ํ์
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
cnt = d + 1
# ๊ฑฐ๋ฆฌ ์คํจ or ์ฑ๊ณต ์ ๋ฌด๋ง ๊ฐ๋ฆฌ๋ฉด ๋จ
if 0 <= nx < 5 and 0 <= ny < 5 and not visited[nx][ny]:
visited[nx][ny] = True
# ์์์๊ฐ ์์์๋ ์๋ฆฌ
if p[nx][ny] == 'P':
# ๊ฑฐ๋ฆฌ๊ฐ 2 ์ดํ๋ฉด ์ ํ ๊ฑฐ๋ฆฌ ์คํจ!
if cnt <= 2:
return False
# ๋น ํ
์ด๋ธ์ ์๋ฏธ
elif p[nx][ny] == 'O':
if cnt == 1:
queue.append([nx, ny, cnt])
return True
# ์๋ฆฌ์ ์์์๋ ์์์๋ค์ ์ ๋ณด์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋๊ธฐ์ค๋ณ๋ก ๋ด์ 2์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด
def solution(places):
answer = []
for p in places:
flag = 1
# ๋๊ธฐ์ค์ 5๊ฐ์ด๋ฉฐ, ๊ฐ ๋๊ธฐ์ค์ 5x5 ํฌ๊ธฐ
for i in range(5):
for j in range(5):
# ์์์๊ฐ ์์์๋ ์๋ฆฌ
if p[i][j] == 'P':
ok = bfs(p, [i, j, 0])
if ok == 0:
flag = 0
# ๊ฐ ๋๊ธฐ์ค ๋ณ๋ก ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1
# ํ ๋ช
์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0
answer.append(flag)
return answer
์ ํ์ฑ
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
์ ํ์ฑ ํ ์คํธ ํ ์คํธ 1 ใ ํต๊ณผ (0.26ms, 10.2MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.09ms, 10.2MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.11ms, 10.3MB) ํ ์คํธ 4 ใ ํต๊ณผ (0.07ms, 10.2MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.18ms, 10.4MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.12ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.10ms, 10.3MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.12ms, 10.2MB) ํ ์คํธ 9 ใ ํต๊ณผ (0.10ms, 10.2MB) ํ ์คํธ 10 ใ ํต๊ณผ (0.12ms, 10.2MB) ํ ์คํธ 11 ใ ํต๊ณผ (0.12ms, 10.2MB) ํ ์คํธ 12 ใ ํต๊ณผ (0.12ms, 10.3MB) ํ ์คํธ 13 ใ ํต๊ณผ (0.12ms, 10.2MB) ํ ์คํธ 14 ใ ํต๊ณผ (0.06ms, 10.4MB) ํ ์คํธ 15 ใ ํต๊ณผ (0.06ms, 10.4MB) ํ ์คํธ 16 ใ ํต๊ณผ (0.16ms, 10.3MB) ํ ์คํธ 17 ใ ํต๊ณผ (0.11ms, 10.3MB) ํ ์คํธ 18 ใ ํต๊ณผ (0.13ms, 10.4MB) ํ ์คํธ 19 ใ ํต๊ณผ (0.14ms, 10.4MB) ํ ์คํธ 20 ใ ํต๊ณผ (0.13ms, 10.4MB) ํ ์คํธ 21 ใ ํต๊ณผ (0.12ms, 10.3MB) ํ ์คํธ 22 ใ ํต๊ณผ (0.13ms, 10.2MB) ํ ์คํธ 23 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 24 ใ ํต๊ณผ (0.26ms, 10.2MB) ํ ์คํธ 25 ใ ํต๊ณผ (0.03ms, 10.4MB) ํ ์คํธ 26 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 27 ใ ํต๊ณผ (0.08ms, 10.2MB) ํ ์คํธ 28 ใ ํต๊ณผ (0.07ms, 10.3MB) ํ ์คํธ 29 ใ ํต๊ณผ (0.06ms, 10.3MB) ํ ์คํธ 30 ใ ํต๊ณผ (0.05ms, 10.4MB) ํ ์คํธ 31 ใ ํต๊ณผ (0.11ms, 10.3MB) ์ฑ์ ๊ฒฐ๊ณผ ์ ํ์ฑ: 100.0 ํฉ๊ณ: 100.0 / 100.0
3. ํด์ค
- ์์์ ๋ผ๋ฆฌ์ ๊ฑฐ๋ฆฌ๊ฐ 2์ดํ์ธ์ง๋ง ํ์ธํ๋ฉด ๋๋ค
- ์์์ ์๋ฆฌ์ ์ฃผ๋ณ ํ์์ ํ๊ณ , ๋ค์ ์์์์์ ๊ฑฐ๋ฆฌ๊ฐ 2 ์ดํ์ด๋ฉด ์คํจ
- ๊ทธ ์ธ์๋ ๋น ํ
์ด๋ธ ์๋ง ์กฐ๊ธ ์ ์ํ๋ฉด ๋๋ค
- ๋น ํ ์ด๋ธ์ธ๋ฐ ๊ฑฐ๋ฆฌ๊ฐ 1 ์ด๋ฉด, ํ ๋ฒ ๋ queue ์ ๋ฃ์ด์ ํ์ํ๋ค
This post is licensed under CC BY 4.0 by the author.