728x90
https://www.acmicpc.net/problem/3184
그래프 탐색을 활용하는 문제이다. BFS 로 이차원배열을 탐색했고 해당 구역에서 양과 늑대의 수를 확인한다음 한쪽 값만 내보내는 방식으로 진행했다.
# import sys; input = sys.stdin.readline
from collections import deque
def bfs(i, j, _map, visit):
global n, m
ret = [0, 0]
q = deque()
q.append((i, j))
while q:
r, c = q.popleft()
if visit[r][c]: continue
visit[r][c] = 1
if _map[r][c] == 'o':
ret[0] += 1
elif _map[r][c] == 'v':
ret[1] += 1
for dr, dc in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
nr, nc = r + dr, c + dc
if 0 > nr or nr >= n or 0 > nc or nc >= m: continue
if _map[nr][nc] == '#': continue
q.append((nr, nc))
if ret[0] > ret[1]:
ret[1] = 0
else:
ret[0] = 0
return ret
def main():
global n, m
n, m = map(int, input().split())
_map = [list(input().rstrip()) for _ in range(n)]
visit = [[0 for _ in range(m)] for _ in range(n)]
answer = [0, 0]
for i in range(n):
for j in range(m):
if _map[i][j] == '#': continue
if visit[i][j]: continue
ret_val = bfs(i, j, _map, visit)
answer[0] += ret_val[0]
answer[1] += ret_val[1]
print(*answer)
if __name__ == "__main__":
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 20207 달력 python (0) | 2022.02.10 |
---|---|
[백준] 18222 투에-모스 문자열 python (0) | 2022.02.09 |
[백준] 13549 숨바꼭질 3 python (0) | 2022.02.07 |
[백준] 2407 조합 python (0) | 2022.02.07 |
[백준] 9421 소수상근수 python (0) | 2022.02.06 |