๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Problem Solving/PROGRAMMERS

[python]ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

by DevIseo 2022. 8. 4.

[python]ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/81302

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

from collections import deque

def bfs(arr):
    start = [] #'P'์ธ ์ขŒํ‘œ๋“ค ๋ชจ์œผ๊ธฐ
    for i in range(5):
        for j in range(5):
            if arr[i][j] == 'P':
                start.append([i,j])
                
    #'P'๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ดbfs๋Œ๋ฆฌ๊ธฐ
    for s in start:
        # print(s)
        q = deque([s])
        visit = [[0]*5 for _ in range(5)]
        distance = [[0]*5 for _ in range(5)]
        visit[s[0]][s[1]] = 1
        # print(visit)
        
        while q:
            ny,nx = q.popleft()
            directy = [-1,1,0,0]
            directx = [0,0,-1,1]
            
            for i in range(4):
                dy = directy[i] + ny
                dx = directx[i] + nx
                
                if 0<=dy<5 and 0<=dx<5 and visit[dy][dx] == 0:
                    if arr[dy][dx] == 'O':
                        q.append([dy,dx])
                        visit[dy][dx] = 1
                        distance[dy][dx] = distance[ny][nx]+1
                        
                    
                    if arr[dy][dx] == 'P' and distance[ny][nx]<=1:
                        return 0
    return 1

#๊ฐ ์ผ€์ด์Šค๋งˆ๋‹ค bfs๋ฅผ ๋Œ๋ ค์ฃผ์ž
def solution(places):
    answer = []
    for p in places:
        answer.append(bfs(p))
    return answer

์˜ˆ์‹œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์„ฑ๊ณตํ–ˆ๋Š”๋ฐ, ์ œ์ถœํ•˜๊ณ  ๋‚˜์„œ ์‹คํŒจํ•œ ์ผ€์ด์Šค๊ฐ€ ์žˆ์–ด์„œ ํ•œ์ฐธ๋™์•ˆ ์™œ ํ‹€๋ ธ์ง€..? ํ–ˆ๋Š”๋ฐ

O๋ฅผ ์ˆซ์ž0์œผ๋กœ ์ ์–ด์„œ์˜€๋‹ค...ํ•˜ํ•˜

๋Œ“๊ธ€