白俊-楊3154号
楊3154号
羊はオオカミと戦うことができ、領域内の羊の数がオオカミの数より多いと、オオカミを檻から追い出すことができます.さもないとオオカミは地元の羊を全部食べます.
プログラムを作成し、生きている羊と狼の数を出力します.
典型的なdfs,bfs問題.1つの柵内で羊の個数とオオカミの個数を求めた後、羊の個数がもっと多ければ、羊の個数を求め、そうでなければオオカミの個数を加えると、簡単に解決できます.
😒 問題の概要
羊はオオカミと戦うことができ、領域内の羊の数がオオカミの数より多いと、オオカミを檻から追い出すことができます.さもないとオオカミは地元の羊を全部食べます.
プログラムを作成し、生きている羊と狼の数を出力します.
👏 key point
典型的なdfs,bfs問題.1つの柵内で羊の個数とオオカミの個数を求めた後、羊の個数がもっと多ければ、羊の個数を求め、そうでなければオオカミの個数を加えると、簡単に解決できます.
from collections import deque
# n = 세로, m = 가로
n, m = map(int, input().split())
graph = []
for _ in range(n):
graph.append(list(map(str,input())))
visited = [[False]*m for _ in range(n)]
dy = [-1,1,0,0]
dx = [0,0,1,-1]
sheep = 0
wolf = 0
def bfs(a,b):
q = deque()
result = [0,0] # 울타리 내에 있는 양,늑대의 마리 수 정보를 넣은 리스트
#처음 방문했을 때 양 또는 늑대가 있을 때
if graph[a][b] == 'o':
result[0] += 1
elif graph[a][b] == 'v':
result[1] += 1
q.append((a,b))
visited[a][b] = True
while q:
y,x = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= m or ny >= n:
continue
if graph[ny][nx] != '#' and visited[ny][nx] == False:
visited[ny][nx] = True
#이동 시 양 또는 늑대가 있을 시
if graph[ny][nx] == 'o':
result[0] += 1
elif graph[ny][nx] == 'v':
result[1] += 1
q.append((ny,nx))
return result
for i in range(n):
for j in range(m):
if graph[i][j] != '#' and visited[i][j] == False:
ans = bfs(i,j)
#전체 양과 늑대의 개수 sheep, wolf
if ans[0] > ans[1]:
sheep += ans[0]
else:
wolf += ans[1]
print(sheep,end = " ")
print(wolf)
Reference
この問題について(白俊-楊3154号), 我々は、より多くの情報をここで見つけました https://velog.io/@turtle601/백준-양-3154번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol