1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ ๋งํฌ
- ์
๋ ฅ: 5๊ฐ์ ๋๊ธฐ์ค ์ ๋ณด
- ์ถ๋ ฅ: ๊ฐ ๋๊ธฐ์ค์์ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ ํ์ผ๋ฉด 1, ์๋๋ฉด 0์ ์ถ๋ ฅ
2. ์ฝ๋
import queue
D = ((-1,0),(1,0),(0,-1),(0,1))#์ํ์ข์ฐ๋ก ์ด๋ํ๊ธฐ ์ํ delta array
def bfs(place, row, col): #P์ ์์น์์ bfs์คํ
visited = [[False for _ in range(5)] for _ in range(5)] #5x5
q = queue.Queue()
visited[row][col] = True #ํ ๊บผ๋ด๊ธฐ์ ์ ๋งํน
q.put((row,col,0)) #ํ, ์ด, ๊ฑฐ๋ฆฌ
while not q.empty():
curr = q.get()
if curr[2] > 2: #๊ฑฐ๋ฆฌ๊ฐ 2๋ฅผ ์ด๊ณผํ๋ฉด ์คํต
continue
if curr[2] !=0 and place[curr[0]][curr[1]] == 'P': #์์์์น๊ฐ ์๋ ๋ค๋ฅธ P๋ฅผ ๋ง๋ฌ์ ๋
return False
#๊ธธ์ด 2์ดํ์ผ ๋
for i in range(4):
nr = curr[0] +D[i][0]
nc = curr[1] +D[i][1]
if nr < 0 or nr >4 or nc <0 or nc >4:#๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ฉด
continue
if visited[nr][nc]: #์ด๋ฏธ ํ์ ๋ฃ์ ์ ์ด ์๋ค๋ฉด ๋ค์ ๋ฃ์ ํ์๊ฐ์์
continue
if place[nr][nc] == 'X':#ํํฐ์
์ด ์์ผ๋ฉด ์ด๋ํ ์ ์์
continue
visited[nr][nc] = True
q.put((nr,nc, curr[2]+1))
return True
def check(place):
for r in range(5):
for c in range(5):
if place[r][c] == 'P':
if bfs(place,r,c) == False: #๊ฑฐ๋ฆฌ๋๊ธฐ ์์ง์ผ์ง
return False
return True #์กฐ๊ฑด๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์์์ ๋ชจ๋ ํ์์ ์๋ฃํ๊ฒ ๋๋ค๋ฉด True ๋ฆฌํด
def solution(places):
answer = []
for place in places:
if check(place): #๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์๋์ง
answer.append(1)
else:
answer.append(0)
return answer
3. ํ๊ณ
- P๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๊ฑฐ๋ฆฌ๊ฐ 2์ดํ์ธ ๋ถ๋ถ๋ง bfs๋ก ๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ ์งํ๋๊ณ ์๋์ง ์ฝ๋๋ฅผ ์ง์ผ๊ฒ ๋ค๊ณ ์๊ฐ
- bfs ๊ตฌํ ๋ถ๋ถ์์ ๋งํ๋ค.
- ๊ธธ์ด๋ฅผ ์ด๋ป๊ฒ ์ถ์ ํ ์ง? (2์ดํ๋ง ํ์ํ๊ฒ ํ๋ ค๋ฉด)
- ํ์ ๊ฑฐ๋ฆฌ์ ๋ณด๋ฅผ ์ถ๊ฐ
- ํ์๋ ์๋กญ๊ฒ ํ์ํ ์ขํ์ P๋ก๋ถํฐ ํด๋น ์ขํ๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ ์ฅ๋์ด ์๋ค.
- ํ์์ ์ ๋ณด๋ฅผ ๊บผ๋์ ๋, ๊ฑฐ๋ฆฌ๊ฐ 2๋ฅผ ์ด๊ณผํ๋์ง ํ์ธ ํ,
- ์ด๊ณผํ๋ค๋ฉด continue๋ฅผ ํตํด ํด๋น ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ๋ฅผ ํ์ํ์ง ๋ชปํ๋๋ก ํ๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ 2์ด๋ด์ธ ์ขํ์ ์ํ์ข์ฐ๋ง์ ํ์ํ๋๋ก ํ๋ค.
- ์ฃผ๋ณ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ํ์ํ ์ง?
- delta array๋ฅผ ํ์ฉํด์ ์ํ์ข์ฐ๋ฅผ ํ์
- ์๋กญ๊ฒ ๋ฐ๊ฒฌํ ํ์๊ฐ๋ฅํ ๋ถ๋ถ์ ์ขํ(nr,nc),ํ์ฌ๊น์ง์ ๊ฑฐ๋ฆฌ+1(curr[2]+1)ํด์ ํ์ ๋ด๊ธฐ
- nr,nc๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ ๊ฒฝ์ฐ, ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ขํ์ธ๊ฒฝ์ฐ, ํด๋น ์์น์ ํํฐ์
์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ continue๋ฅผ ํตํด ์๋ ๋ด์ฉ ๊ฑด๋๋ฐ๊ธฐ(ํ์ ๋ฃ์ง ๋ชปํ๋๋ก)
- ํํฐ์
์ด ์์ ๋ ์์ธ์ฒ๋ฆฌ๋ ์ด๋ป๊ฒ ํ ์ง?
- P์ ๋ ๋ค๋ฅธ P๊ฐ ๊ฑฐ๋ฆฌ 2 ์ด๋ด์ ์์ ๋, X๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ ค๋ ์ด๋ป๊ฒ ํ ์ง ์๊ฐ์ด ์๋จ
- ํ์ด๋ฅผ ๋ณด๋, ๋๊ธฐ์ค ๋ณ๋ก P๋ฅผ ๋จผ์ ์ฐพ๊ณ (checkํจ์), ๊ทธ ๋์ ์ขํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ , ๊ธธ์ด 2์ด๋ด์ผ ๋ ์ํ์ข์ฐ๋ฅผ ํ์ํ๋ ๋ฐ๋ณต๋ฌธ(bfsํจ์ ๋ด์ for๋ฌธ)์์ ํํฐ์
์ด ์์ผ๋ฉด ํ์ ๋ฃ์ง ์๋๋ก ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํด์ผํจ
- if place[nr][nc] == 'X' : continue
- ํด๋น ๋ฐฉํฅ์ ํ์์ ์ค์ง์ํด
4. ์ฐธ๊ณ
https://www.youtube.com/watch?v=hCVgKE6qwFs