DevYoon
[SWEA] 2117. ํ ๋ฐฉ๋ฒ ์๋น์ค (Python) ๋ณธ๋ฌธ
link ๐ https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu
from collections import deque
def bfs(y, x):
global Max, M
check = [[0]*N for _ in range(N)]
q = deque()
q.append((y, x)) # y, x
check[y][x] = 1
K = 0 # ์ ๊ณต ๋ฒ์
home = 0 # ๋ฐฉ๋ฒ ์๋น์ค ๋ฐ๋ ์ง์ ๊ฐ์
if arr[y][x] == 1: # ์์ ์ง์ ์ ์ง์ด ์์ผ๋ฉด ๋ํด์ฃผ๊ธฐ
home += 1
while q:
ny, nx = q.popleft()
if check[ny][nx] != K:
K = check[ny][nx]
cost = K * K + (K - 1) * (K - 1)
if M * home >= cost:
if Max < home:
Max = home
direct = [(-1, 0), (1, 0), (0, -1), (0, 1)] # ์ ํ ์ข ์ฐ
for idx in range(4):
dy = direct[idx][0]+ny
dx = direct[idx][1]+nx
if 0 <= dy < N and 0 <= dx < N:
if check[dy][dx] > 0: continue # ์ด๋ฏธ ์๋น์ค ์ฌ์ฉ ์ค์ด๋ฉด X
check[dy][dx] = K+1
if arr[dy][dx] == 1:
home += 1
q.append((dy, dx))
return Max
t = int(input())
for tc in range(1, t+1):
Max = -1e9
N, M = map(int, input().split()) # ๋์ ํฌ๊ธฐ N, ์ง๋ง๋ค ์ง๋ถ ๋น์ฉ M
arr = [list(map(int, input().split())) for _ in range(N)]
for y in range(N):
for x in range(N):
bfs(y, x)
print(f'#{tc} {Max}')
โ๏ธ ๋ฉ๋ชจ
- ๋ณด์๋ง์ floodfill๋ก ํ๋ฉด ๋๊ฒ ๋ค๊ณ ๊ฐ์ด ์์ ์ ๋ฌ๋ค!
- ํ์ง๋ง... ์ฌ์ ํ ์ค์ํฌ์ฑ์ด...๐ฅฒ
- ์์ํ ๋ถ๋ถ (์์์ ์ ์ง์ด ์์ ๋๋ง home์ 1์ ๋ํด์ค์ผ ํ๋ค๋ ์ง)์์ ์ค์๊ฐ ๋ง์์ ํ ๋ฒ์ ๋ต์ ๋ด์ง ๋ชปํ๋ค
- ๊ทธ๋๋ ์ธ์ ๊ฐ,,, ์ค๊ณ ํ ๋ฒ์ ๋ฑ ํ๊ณ ๋ต๋ ํ ๋ฒ์ ๋ฑ ๋์ค๋ ๋ ์ด ์์ง ์์๊น?!ใ ใ ใ
- ์ฝ๊ฒ๋ง ์ด์๊ฐ๋ฉด ์ฌ๋ฏธ์์ด ๋น๊ณ ,,,๐ฅฒ๐ต