[ํ๋ก๊ทธ๋๋จธ์ค | Lv2] ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (Python) - 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ
https://school.programmers.co.kr/learn/courses/30/lessons/81302
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋๊ธฐ์ค์ 5๊ฐ์ด๊ณ , 5*5 ํฌ๊ธฐ๋ก ๊ณ ์ ๋ ์ฌ์ด์ฆ๋ก ์ฃผ์ด์ก๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ๊น๋ค๋กญ์ง ์์ ๋ฌธ์ ์๋ค.
์์์๋ค๋ผ๋ฆฌ๋ ๋งจํดํผ ๊ฑฐ๋ฆฌ๊ฐ 2 ์ดํ๋ก ์์ง ๋ง์์ผ ํ๋๋ฐ, ๊ทธ ์ฌ์ด์ ํํฐ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์์ ์ ์๋ค.
์ ๋ ฅ๋ ๋ฐฐ์ด์ ๋๊ธฐ์ค ๋ณ๋ก ๋๋์ด bfs๋ฅผ ์ํํ๋ค.
๋จผ์ P์ธ ๊ณณ์ ์ขํ๋ฅผ ๋ชจ๋ ํ์ ๋ฃ๋๋ค.
ํ์์ ํ๋์ฉ ๋นผ์ ์ํ์ข์ฐ๋ฅผ ๋๋ฉด์
P์ธ ๊ณณ์ด ์กด์ฌํ๋ฉด 0์ ๋ฆฌํดํ๊ณ , (์๋ฆฌ ์ฌ์ด๊ฐ ๋งจํดํผ ๊ฑฐ๋ฆฌ1์ธ ๊ฒฝ์ฐ)
O์ธ ๊ณณ์ด ์กด์ฌํ๋ฉด ๋ค์ ์ํ์ข์ฐ๋ฅผ ํ์ํ์ฌ P์ธ ๊ณณ์ด ๋ ๊ณณ ์ด์์ด๋ฉด 0์ ๋ฆฌํดํ๋๋ก ํ๋ค.
(์๋ฆฌ ์ฌ์ด๊ฐ ๋งจํดํผ ๊ฑฐ๋ฆฌ2์ด๊ณ ์ฌ์ด์ ๋น ํ ์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ)
์์ ์ด๋ ํ ์กฐ๊ฑด๋ฌธ์๋ ๊ฑธ๋ฆฌ์ง ์์๋ค๋ฉด ๊ฑฐ๋ฆฌ๋๊ธฐ์ ์ฑ๊ณตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต์ข ์ ์ผ๋ก 1์ ๋ฆฌํดํ๋ค.
# ํ๋ก๊ทธ๋๋จธ์ค 81302: ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ)
from collections import deque
def bfs(place):
queue = deque()
for i in range(5):
for j in range(5):
if place[i][j] == 'P': # ์ขํ 'P'์ธ ๊ณณ ๋ชจ๋ ํ์ ์ฝ์
queue.append([i, j])
move = [[1, 0], [-1, 0], [0, 1], [0, -1]]
while queue:
x, y = queue.pop()
for i in range(4): # ์ํ์ข์ฐ ํ์
dx = x + move[i][0]
dy = y + move[i][1]
if 0 <= dx < 5 and 0 <= dy < 5:
if place[dx][dy] == 'P': # ์ขํ๊ฐ 'P'์ธ ๊ณณ์ด ์กด์ฌํ๋ฉด ๊ฑฐ๋ฆฌ๋๊ธฐ ์คํจ
return 0
if place[dx][dy] == 'O': # ์ขํ๊ฐ 'O'์ธ ๊ณณ์ด ์กด์ฌํ๋ฉด ์ํ์ข์ฐ ํ๋ฒ ๋ ํ์
cnt = 0
for j in range(4):
mx = dx + move[j][0]
my = dy + move[j][1]
if 0 <= mx < 5 and 0 <= my < 5:
if place[mx][my] == 'P': # ์ขํ๊ฐ 'P'์ธ ๊ณณ์ ๊ฐ์ ์นด์ดํ
cnt += 1
if cnt >= 2: # ์ขํ๊ฐ 'P'์ธ ๊ณณ์ด ๋ ๊ณณ ์ด์์ด๋ฉด ๊ฑฐ๋ฆฌ๋๊ธฐ ์คํจ
return 0
return 1
def solution(places):
answer = []
for place in places:
answer.append(bfs(place))
return answer