백준 3184 (python) 양
728x90
SMALL

 

 

매 칸에 대해서 방문 검사를 하며, 

해당 칸이 울타리 안쪽이라면 bfs로 울타리 내부의 늑대와 양의 개수를 세고, return 값으로 늑대와 양을 반환했다.

 

어떤 칸에 대해 방문하지 않았다고 하면 무조건 bfs로 탐색하였다.

 

 

from collections import deque
import queue
from re import T


def bfs(a, b):
    queue = deque([(a, b)])
    wolf = 0
    sheep = 0
    while queue:
        x, y = queue.popleft()
        if arr[x][y] == "v":
            wolf += 1
        elif arr[x][y] == "o":
            sheep += 1

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx < 0 or nx >= r or ny < 0 or ny >= c:
                continue
            if visit[nx][ny] or arr[nx][ny] == "#":
                continue
            visit[nx][ny] = True
            queue.append((nx, ny))

    return wolf, sheep


dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

r, c = map(int, input().split())
arr = []
visit = [[0]*c for i in range(r)]

for _ in range(r):
    arr.append(list(input().rstrip()))


wolf = 0
sheep = 0
for i in range(r):
    for j in range(c):
        if not visit[i][j]:
            w, s = bfs(i, j)
            if w < s:
                sheep += s
            else:
                wolf += w

print(sheep, wolf)

 

 

 

 

 

파이썬으로 언어를 바꾸고 능률이 올랐다.

머릿속에 풀이가 떠오르는대로 코드를 치고 실행 확인 후 바로 제출했는데 맞았다.

매력적이고 편한 언어라고 느꼈다.

 

728x90
LIST

'PS > BOJ' 카테고리의 다른 글

백준 17478 (Java, C++) 재귀함수가 뭔가요?  (0) 2023.02.06
백준 12851 (C++) 숨바꼭질  (2) 2023.01.30
백준 1389 (python) 케빈 베이컨의 6단계 법칙  (2) 2022.08.29
왜 안풀림  (4) 2022.08.15
백준 1913번 (C++) 달팽이  (0) 2022.08.11