3184λ² - μ
λ€μ BFS λ¬Έμ μ λλ€!
λΉκ³΅κ° / μΈν리 / μ / λλλ‘ μ΄λ£¨μ΄μ§ κ·Έλνκ° μ£Όμ΄μ‘μ λ λ μ΄ λ°μ ν μ΅μ’ μ μΌλ‘ μ΄μλ¨λ μλ¬Όκ³Ό κ·Έ μλ¬Όμ λ§λ¦Ώμλ₯Ό μΆλ ₯νλ©΄ λλ λ¬Έμ μ λλ€.
μΈνλ¦¬λ‘ κ°λμ΄μ§ 곡κ°μ 'ν 곡κ°'μ΄λΌκ³ κ·μ νλ©°, ν κ³΅κ° λ΄ μμ μκ° λλλ³΄λ€ λ§μ κ²½μ° μμ΄ κ·Έ κ³΅κ° λ΄ λλλ₯Ό μ«μλ΄κ³ , κ·Έλ μ§ μμ κ²½μ° (λλμ μμ μκ° λΉλ±νκ±°λ λλμ μκ° λ λ§μ κ²½μ°)μλ λλκ° κ·Έ κ³΅κ° λ΄μ μμ λͺ¨λ μ‘μλ¨Ήμ΅λλ€.
...#..
.##v#.
#v.#.#
#.o#.#
.###.#
...###
μ΄λ κ² μκΈ΄ ν μ€νΈμΌμ΄μ€κ° μλ€λ©΄ 1λ² κ³΅κ°μ λλ νλ§λ¦¬κ° κ°λ¬μ Έ μμΌλκΉ λλ + 1, 2λ² κ³΅κ°μ λλ νλμ μ νλκ° κ°νμμΌλκΉ λλκ° μμ μ‘μλ¨Ήμ΄μ λλ + 1, μ΅μ’ μ μΌλ‘ λλ 2λ§λ¦¬κ° μ½λλ€.
μ΄μ μ½λλ‘ λ€μ΄κ°λ΄ μλ€.
R,C = map(int,input().split())
field = []
sheep_ans = 0
wolf_ans = 0
visited = [[0]*C for _ in range(R)]
que = deque()
for _ in range(R):
a = list(input())
field.append(a)
λ¨Όμ κ·Έλνμ ν¬κΈ°μ μ΅μ’ μ μΌλ‘ μκ³Ό λλμ λ§λ¦Ώμλ₯Ό ννν΄μ€ λ³μ, κ·Έλ¦¬κ³ bfsλ₯Ό μ¬μ©νκΈ° μν queμ λ°±νΈλνΉμΌλ‘ λ°©λ¬Έ μ¬λΆλ₯Ό νμν΄μ€ visited λ±μ μ μΈνκ² μ΅λλ€.
for i in range(R):
for j in range(C):
if field[i][j] == 'v' or field[i][j] == 'o':
bfs(i,j)
κ·Έλ¦¬κ³ κ·Έλνλ₯Ό νλμ© λλ©° μμ΄λ λλκ° λμ€λ μκ°λΆν° νμμ μμνκ² μ΅λλ€.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
BFS μ¬μ©μ μν΄ dequeμ μνμ’μ° μ μΈμ μ€μνκ³
def bfs(x,y):
que.append([x,y])
global sheep_ans,wolf_ans
wolf = 0
sheep = 0
visited[x][y] = 1
if field[x][y] == 'o':
sheep += 1
else:
wolf += 1
본격μ μΌλ‘ BFS ν¨μ μμ±μ μμν΄λ³΄κ² μ΅λλ€.
.#.
#v#
.#.
μΌλ¨ μμκ°μ΄ λλ λλ μμ΄ νΌμμ κ°νμλ μν©μ΄ λ°μ ν μ μμΌλ―λ‘ λ§¨ μ²μμ λ°μ μΈλ±μ€λ λ°©λ¬Έ μ²λ¦¬λ₯Ό νκ³ ν΄λΉ μΈλ±μ€κ° μμΈμ§ λλμΈμ§ νλ¨ν΄μ λλμ μ§μλ³μ or μμ μ§μλ³μ + 1μ ν΄μ£Όλλ‘ νκ² μ΅λλ€.
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=R or ny>=C:
continue
λ€μμΌλ‘ BFS νμμ κΈ°λ³Έμ μΈ κ³Όμ μ΄λΌ ν μ μλ μνμ’μ° 4λ°©ν₯ νμμ μ€μν΄μ£Όκ³
if not visited[nx][ny]:
if field[nx][ny] == '#':
visited[nx][ny] = 1
continue
μΈνλ¦¬κ° λμ¨λ€λ©΄ λ°©λ¬Έ μ¬λΆλ§ νκΈ°ν΄μ£Όκ³ continueλ‘ μ€ν΅ (곡κ°λ§ λλ λΏμ΄μ§ λ±ν ν κ² μμ)
if field[nx][ny] == '.':
visited[nx][ny] = 1
que.append([nx,ny])
λΉ κ³΅κ°μ΄ λμ¨λ€λ©΄ λ°©λ¬Έ μ¬λΆ νκΈ°ν΄μ£Όκ³ λ€μ νμμ§μ μ μΆκ°
if field[nx][ny] == 'v':
visited[nx][ny] = 1
field[nx][ny] = 'chk'
wolf += 1
que.append([nx,ny])
λ§μ½ λλκ° λμ¨λ€λ©΄ λ°©λ¬Έ μ¬λΆ νκΈ°ν΄μ£Όκ³ ν΄λΉ μΈλ±μ€ μ¬νμμ νμ§ μλλ‘ λ€λ₯Έ λ³μλ‘ μΉν, κ·Έλ¦¬κ³ ν΄λΉ ꡬμ λ΄μ λλκ° μλ€λ λ»μ΄λκΉ λλμ μ§μλ³μ + 1 νκ³ λ€μ νμμ§μ μ μΆκ°
if field[nx][ny] == 'o':
visited[nx][ny] = 1
field[nx][ny] = 'chk'
sheep += 1
que.append([nx,ny])
λ§μ½ μμ΄ λμ¨λ€λ©΄ λ°©λ¬Έ μ¬λΆ νκΈ°ν΄μ£Όκ³ ν΄λΉ μΈλ±μ€ μ¬νμμ νμ§ μλλ‘ λ€λ₯Έ λ³μλ‘ μΉν, κ·Έλ¦¬κ³ ν΄λΉ ꡬμ λ΄μ μμ΄ μλ€λ λ»μ΄λκΉ μμ μ§μλ³μ + 1 νκ³ λ€μ νμμ§μ μ μΆκ°
νλ©΄ λ©λλ€.
λ§μ§λ§μΌλ‘ μ ν¬κ° μμ±ν건 μ§μλ³μ, κ·Έλ¬λκΉ ν΄λΉ ꡬμ 'λ΄'μ μκ³Ό λλμ λ§λ¦Ώμμ΄λ―λ‘
if sheep > wolf:
sheep_ans += sheep
else:
wolf_ans += wolf
μμ λ§λ¦Ώμκ° λλλ³΄λ€ λ§λ€λ©΄ λλλ₯Ό μ«μλ΄λ―λ‘ μμ μ΅μ’
κ°μ ν ꡬμ λ΄ μμ λ§λ¦Ώμ,
μλλΌλ©΄ λλκ° μμ λ€ μ‘μλ¨ΉμΌλ―λ‘ λλμ μ΅μ’
κ°μ ν ꡬμ λ΄ λλμ λ§λ¦Ώμλ₯Ό μΆκ°ν΄μ£Όλ©΄ λ©λλ€.
print(sheep_ans,wolf_ans)
λ§μ§λ§μΌλ‘ μΆλ ₯νλ©΄ λ΅μ΄ μ μμ μΌλ‘ λμ€λ κ±Έ νμΈ ν μ μμ΅λλ€.