๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv2] ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ (Python) - 2021 ์นด์นด์˜ค ์ฑ„์šฉ์—ฐ๊ณ„ํ˜• ์ธํ„ด์‹ญ

sssbin 2023. 3. 3. 17:05

 

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