https://www.acmicpc.net/problem/3187
3187번: 양치기 꿍
입력의 첫 번째 줄에는 각각 영역의 세로와 가로의 길이를 나타내는 두 개의 정수 R, C (3 ≤ R, C ≤ 250)가 주어진다. 다음 각 R줄에는 C개의 문자가 주어지며 이들은 위에서 설명한 기호들이다.
www.acmicpc.net
bfs를 이용하여 울타리 내에 양과 늑대가 몇마리가 들어있는지 확인한다
visit 배열과 제어문을 이용하여 들어갔던 곳은 다시 들어가지 않고, 전체 울타리를 확인하면 된다!
def bfs(start):
global k, v
q = deque()
q.append(start)
directy = [-1,1,0,0]
directx = [0,0,-1,1]
while q:
nowy,nowx =q.popleft()
for i in range(4):
dy = directy[i] + nowy
dx = directx[i] + nowx
if 0<=dy<r and 0<=dx<c:
if visit[dy][dx] ==1: continue
visit[dy][dx] = 1
if arr[dy][dx] =='#': continue
if arr[dy][dx] =='k':
k +=1
if arr[dy][dx] =='v':
v +=1
q.append((dy,dx))
from collections import deque
r,c = list(map(int,input().split()))
arr = [list(input()) for _ in range(r)]
visit = [[0]*c for _ in range(r)]
lst = [0,0]
for y in range(r):
for x in range(c):
if arr[y][x] =="k":
if visit[y][x] ==1: continue
visit[y][x] = 1
k = 1
v = 0
bfs((y,x))
if k > v:
v = 0
else:
k = 0
lst[0] += k
lst[1] += v
elif arr[y][x] =="v":
if visit[y][x] ==1: continue
visit[y][x] = 1
k = 0
v = 1
bfs((y,x))
if k > v:
v = 0
else:
k = 0
lst[0] += k
lst[1] += v
print(*lst)
'Algorithm > baekjoon' 카테고리의 다른 글
[파이썬]baekjoon 4446: ROT13 (0) | 2023.02.15 |
---|---|
[파이썬]baekjoon 6137: 문자열 생성 (0) | 2023.02.15 |
[파이썬]baekjoon 12904: A와 B (0) | 2023.02.10 |
[파이썬]baekjoon 12931: 두 배 더하기 (0) | 2023.02.10 |
[파이썬]baekjoon 16198: 에너지 모으기 (0) | 2023.02.09 |
댓글