이번 문제는 깊이우선탐색으로 해결하였다. 이전에 풀어본 양과 늑대 문제와 매우 유사했기 때문에 따로 설명은 생략해도 될 것 같다.
field[y][x]
를 chk로 갱신한다.y+dy[i]
를 저장한다.x+dx[i]
를 저장한다.field[ny][nx]
가 chk, #이 아닐 경우,field[ny][nx]
가 k일 경우, k_cnt를 1 증가시킨다.field[ny][nx]
가 v일 경우, v_cnt를 1 증가시킨다.dfs(ny, nx)
를 재귀호출한다.field[i][j]
가 chk가 아닐 경우,dfs(i, j)
를 호출한다.import sys
sys.setrecursionlimit(10**9)
def dfs(y, x):
global k_cnt
global v_cnt
field[y][x]='chk'
dy=[0, 0, -1, 1]
dx=[1, -1, 0, 0]
for i in range(4):
ny=y+dy[i]
nx=x+dx[i]
if ny>=0 and nx>=0 and ny<r and nx<c and field[ny][nx]!='chk' and field[ny][nx]!='#':
if field[ny][nx]=='k':
k_cnt+=1
if field[ny][nx]=='v':
v_cnt+=1
dfs(ny, nx)
r, c=map(int, input().split())
field=[]
for _ in range(r):
field.append(list(map(str, input())))
k_cnt=0
v_cnt=0
k, v=0, 0
for i in range(r):
for j in range(c):
if field[i][j]!='chk':
dfs(i, j)
if k_cnt>v_cnt:
k+=k_cnt
else:
v+=v_cnt
k_cnt=0
v_cnt=0
print(k, v)