[코딩테스트][SWEA] 🔥 SWEA 2117번 "홈 방범 서비스" 문제: Python으로 완벽 해결하기! 🔥

김상욱·2024년 9월 3일
0
post-thumbnail

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu&

🕒 Python 풀이시간: 40분

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의 "홈 방범 서비스" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊

0개의 댓글