PS/BOJ
백준 3184 (python) 양
akinakamori
2022. 9. 1. 22:45
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