Algorithm (PS)
[백준] 3184번: 양 Python - BFS풀이
minjiwoo
2023. 1. 10. 20:14
728x90
https://www.acmicpc.net/problem/3184
3184번: 양
첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.
www.acmicpc.net
전형적인 dfs/bfs 문제라고 생각함
나는 bfs로 풀었다
from collections import deque
r, c = map(int, input().split())
array = []
sheep = 0
wolf = 0
for i in range(r):
array.append(input())
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
visited = [[False] * c for _ in range(r)]
def bfs(a, b):
global visited
temp_sheep = 0
temp_wolf = 0
queue = deque([])
queue.append((a, b))
visited[a][b] = True
if array[a][b] == 'o':
temp_sheep += 1
if array[a][b] == 'v':
temp_wolf += 1
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < r and 0 <= ny < c and not visited[nx][ny] and array[nx][ny] != '#':
if array[nx][ny] == 'o':
temp_sheep += 1
visited[nx][ny] = True
queue.append((nx, ny))
if array[nx][ny] == 'v':
temp_wolf += 1
visited[nx][ny] = True
queue.append((nx, ny))
if array[nx][ny] == '.': # .
visited[nx][ny] = True
queue.append((nx, ny))
if temp_sheep > temp_wolf:
return temp_sheep, 0
else:
return 0, temp_wolf
for i in range(r):
for j in range(c):
if array[i][j] != '#' and visited[i][j] == False:
result = bfs(i, j)
sheep += result[0]
wolf += result[1]
print(sheep, wolf)
728x90