https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu&
from collections import deque
dx=[0,0,-1,1]
dy=[-1,1,0,0]
for tc in range(1,int(input())+1):
answer=0
N,M=map(int,input().split())
board=[list(map(int,input().split())) for _ in range(N)]
for i in range(N):
for j in range(N):
q=deque()
q.append((i,j,0))
visited=[[-1]*N for _ in range(N)]
visited[i][j]=0
houseCnt=board[i][j]
nowDist=0
answer=max(answer,houseCnt)
while q:
x,y,dist=q.popleft()
if dist>nowDist:
k=dist+1
if houseCnt*M-(k*k+(k-1)*(k-1))>=0:
answer=max(houseCnt,answer)
nowDist+=1
for t in range(4):
nx=x+dx[t]
ny=y+dy[t]
if nx<0 or ny<0 or nx>=N or ny>=N:
continue
if visited[nx][ny]!=-1:
continue
q.append((nx,ny,dist+1))
visited[nx][ny]=visited[x][y]+1
houseCnt+=board[nx][ny]
print("#"+str(tc)+" "+str(answer))
홈 방범 서비스를 설치할 때, 손해를 보지 않는 경우를 찾아서 최대 영향권 내에 있는 집의 갯수를 구하는 문제이다.
모든 영역의 좌표에 대해 BFS를 수행하면 되는데, 이때, 집을 세는 형태로 영역을 조사해 나가다가 거리가 늘어나는 경우에 대해서 즉, 영역이 확장되는 부분에 대해서 영역과 비용에 대해 관계를 따지고 정답을 갱신하면 된다. 이때, k값이 현 거리값과는 다르기 때문에 이를 맞춰서 조정해주어야 한다.
이렇게 Python로 SWEA의 "홈 방범 서비스" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊