๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜: python 3] #14502- ์—ฐ๊ตฌ์†Œ

728x90

 

๐Ÿ“š ์—ฐ๊ตฌ์†Œ

 

๋ฌธ์ œ

์ธ์ฒด์— ์น˜๋ช…์ ์ธ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ์—ฐ๊ตฌํ•˜๋˜ ์—ฐ๊ตฌ์†Œ์—์„œ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์œ ์ถœ๋˜์—ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ์•„์ง ํผ์ง€์ง€ ์•Š์•˜๊ณ , ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ™•์‚ฐ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์—ฐ๊ตฌ์†Œ์— ๋ฒฝ์„ ์„ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค.

์—ฐ๊ตฌ์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ N×M์ธ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง์‚ฌ๊ฐํ˜•์€ 1×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ์—ฐ๊ตฌ์†Œ๋Š” ๋นˆ ์นธ, ๋ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฒฝ์€ ์นธ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋“ ์ฐจ์ง€ํ•œ๋‹ค. 

์ผ๋ถ€ ์นธ์€ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋นˆ ์นธ์œผ๋กœ ๋ชจ๋‘ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ๋กœ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฒฝ์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ์ด๋ฉฐ, ๊ผญ 3๊ฐœ๋ฅผ ์„ธ์›Œ์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ตฌ์†Œ๊ฐ€ ์ƒ๊ธด ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

์ด๋•Œ, 0์€ ๋นˆ ์นธ, 1์€ ๋ฒฝ, 2๋Š” ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ๊ณณ์ด๋‹ค. ์•„๋ฌด๋Ÿฐ ๋ฒฝ์„ ์„ธ์šฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ๋ชจ๋“  ๋นˆ ์นธ์œผ๋กœ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

2ํ–‰ 1์—ด, 1ํ–‰ 2์—ด, 4ํ–‰ 6์—ด์— ๋ฒฝ์„ ์„ธ์šด๋‹ค๋ฉด ์ง€๋„์˜ ๋ชจ์–‘์€ ์•„๋ž˜์™€ ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.

2 1 0 0 1 1 0
1 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ง„ ๋’ค์˜ ๋ชจ์Šต์€ ์•„๋ž˜์™€ ๊ฐ™์•„์ง„๋‹ค.

2 1 0 0 1 1 2
1 0 1 0 1 2 2
0 1 1 0 1 2 2
0 1 0 0 0 1 2
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

๋ฒฝ์„ 3๊ฐœ ์„ธ์šด ๋’ค, ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์งˆ ์ˆ˜ ์—†๋Š” ๊ณณ์„ ์•ˆ์ „ ์˜์—ญ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์œ„์˜ ์ง€๋„์—์„œ ์•ˆ์ „ ์˜์—ญ์˜ ํฌ๊ธฐ๋Š” 27์ด๋‹ค.

์—ฐ๊ตฌ์†Œ์˜ ์ง€๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ ์˜์—ญ ํฌ๊ธฐ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋„์˜ ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (3 ≤ N, M ≤ 8)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ์นธ, 1์€ ๋ฒฝ, 2๋Š” ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ์œ„์น˜์ด๋‹ค. 2์˜ ๊ฐœ์ˆ˜๋Š” 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

๋นˆ ์นธ์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ ์ด์ƒ์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ ์˜์—ญ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

7 7
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

27

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

4 6
0 0 0 0 0 0
1 0 0 0 0 2
1 1 1 0 0 2
0 0 0 0 0 2

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

9

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

8 8
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

3

 

 

โœ ์ ‘๊ทผ

  • ๊ผญ 3๊ฐœ๋ผ๋Š” ๋ง + N๊ณผ M์ด ํฌ์ง€ ์•Š๋‹ค๋Š” ์ ์—์„œ ์กฐํ•ฉ์„ ์ƒ๊ฐํ–ˆ๋‹ค
  • ์กฐํ•ฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ€๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด BFS๋กœ ํƒ์ƒ‰ํ•˜๋„๋ก ํ–ˆ๋‹ค

 

 

 

 

์ •๋‹ต์ฝ”๋“œ

# โœจ ์ž…๋ ฅ
import sys
from collections import deque
from itertools import combinations
import copy

input = sys.stdin.readline
N,M = map(int,input().split())
board = [list(map(int,input().split())) for _ in range(N)]

# โœจ ์ค€๋น„ 1
safe_zone = []
virus = []
res = 0
dx = [-1,0,1,0]
dy = [0,-1,0,1]

# โœจ BFS
def BFS():
    global res
    cnt = len(safe_zone)-3
    ch_virus = deque([])
    for x,y in virus:
        ch_virus.append((x,y))
    while ch_virus:
        xx,yy = ch_virus.popleft()
        for i in range(4):
            nx = xx + dx[i]
            ny = yy + dy[i]
            if 0<=nx<N and 0<=ny<M and ch_board[nx][ny] == 0:
                ch_board[nx][ny] = 2
                ch_virus.append((nx,ny))
                cnt-=1
    res = max(res,cnt)
    
# โœจ ์ค€๋น„ 2
for i in range(N):
    for j in range(M):
        if board[i][j] == 0:
            safe_zone.append((i,j))
        elif board[i][j] == 2:
            virus.append((i,j))

# โœจ ์กฐํ•ฉ
for comb in combinations(safe_zone,3):
    ch_board = copy.deepcopy(board)
    for x,y in comb:
        ch_board[x][y] = 1
    BFS()
print(res)

ํ•ด์„ค

์ž…๋ ฅ

  • ๋ฌธ์ œ์—์„œ ๋‚˜์˜จ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค

์ค€๋น„ 1, ์ค€๋น„ 2

  • board๋ฅผ ๋Œ๋ฉด์„œ 0์ผ ๊ฒฝ์šฐ safe_zone์— append,
  • 2์ผ ๊ฒฝ์šฐ virus์— appendํ•œ๋‹ค

์กฐํ•ฉ

  • combinations๋ฅผ ์ด์šฉํ•ด์„œ 3๊ฐœ์”ฉ ์กฐํ•ฉํ•ด์ค€๋‹ค
    ํ•œ ์กฐํ•ฉ๋‹น ch_board๋ผ๋Š” board๋ฅผ deepcopyํ•œ ์นดํ”ผ๋ณธ์„ ๋งˆ๋ จํ•ด์ฃผ๊ณ ,
  • ์ƒˆ๋กญ๊ฒŒ ์ƒ๊ธด 3๊ฐœ์˜ ๋ฒฝ์„ ์„ธ์›Œ์ฃผ๊ณ 
  • BFS๋ฅผ ๋Œ๋ฆฐ๋‹ค

BFS

  • safe_zone์˜ ๊ธธ์ด -3 (๋ฒฝ์„ 3๊ฐœ ์„ธ์šฐ๋‹ˆ๊นŒ) ์„ ํ•˜๊ณ 
  • ch_virus๋ฅผ ๋งŒ๋“ ๋‹ค(์—ฌ๊ธฐ์„œ ๊ณ ์ƒ)
    virus ์œ„์น˜๋ฅผ ๊ฑด๋“ค์ง€ ์•Š๊ณ  ๊ฐ๊ฐ ๋‹ค๋ฅธ ch_board๋ฅผ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด virus ์œ„์น˜๋„ ์ฒ˜์Œ์— ์žˆ๋Š” ์œ„์น˜๋กœ ๊ณ ์ •ํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค
  • ๋‚˜๋จธ์ง€๋Š” ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ch_board๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ appendํ•˜๋ฉฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค
728x90