~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/14502
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- 0์ธ ๊ฐ์ ๋ชจ๋ ์์น๋ฅผ ๋ฆฌ์คํธ (blank)์ ๋ฃ์ด์ cominations ๋ชจ๋์ ์ฌ์ฉํด 3๊ฐ ์์น ๋๋ค ์ถ์ถ(nCr)
- ๋ฒ ์ด์ค๊ฐ ๋๋ ๊ธฐ์กด ์ ๋ณด์ ํด๋น ํ๋ 3๊ฐ์ ์์น๋ฅผ 1๋ก ์ค์ ํ๊ณ check ํจ์ ํธ์ถ
- check ํจ์
~ BFS๋ฅผ ์ํ ํ๋ฅผ ์ ์ธํ์ฌ ๊ฐ์ด 2์ธ ์์น๋ฅผ ๋ฃ๋๋ค.
~ ํ์ ๊ฐ์ ํ๋์ฉ ๊บผ๋ด ํด๋น ํ๋ ์์น์์ ์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ ์์น๊ฐ 0์ด๋ฉด์ ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋์ง ์๋๋ค๋ฉด
2๋ก ๋ณ๊ฒฝํ๊ณ ํด๋น ์์น๋ฅผ ํ์ ์ฝ์ ํ์ฌ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ณณ์ ์ ๋ถ 2๋ก ๋ณ๊ฒฝํ๋ค.
~ ์ต์ข ๊ฒฐ๊ณผ์์ 0์ ๊ฐ์๋ฅผ ์นด์ด๋ํ์ฌ ๋ฐํํ๋ค.
- ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด์ 0์ ๊ฐ์๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ต์ข ๋ต์ด ๋๋ค.
์์ฑ ์ฝ๋
from itertools import combinations
import copy
from collections import deque
import sys
input = sys.stdin.readline
dr = [1, -1, 0, 0] # down, up, right, left
dc = [0, 0, 1, -1]
def check(board):
que = deque()
for i in range(n):
for j in range(m):
if board[i][j] == 2:
que.append((i, j))
while que:
r, c = que.popleft()
for d in range(4):
y = r + dr[d]
x = c + dc[d]
if -1 < x < m and -1 < y < n and board[y][x] == 0:
board[y][x] = 2
que.append((y, x))
result = 0
for i in range(len(board)):
result += board[i].count(0)
return result
n, m = map(int, input().split())
board = []
blank = []
result = 0
for i in range(n):
temp = list(map(int, input().split()))
for j in range(m):
if temp[j] == 0:
blank.append((i, j))
board.append(temp)
nCr = combinations(blank, 3)
for x in nCr:
tempBoard = copy.deepcopy(board)
for i, j in x: # ์ ํ๋ ๋ฒฝ 3๊ฐ ์์น
tempBoard[i][j] = 1
result = max(result, check(tempBoard))
print(result)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
๊ถ๊ธํ ์ฌํญ์ด ์์ผ๋ฉด ๋๊ธ ๋ฌ์์ฃผ์ธ์~!
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1197 ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2023.05.23 |
---|---|
[Python] ๋ฐฑ์ค 18405 ๊ฒฝ์์ ์ ์ผ | BFS (0) | 2023.05.20 |
[Python] ๋ฐฑ์ค 4485 ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? | ๋ค์ต์คํธ๋ผ (0) | 2023.05.18 |
[Python] ๋ฐฑ์ค 1504 ํน์ ํ ์ต๋จ ๊ฒฝ๋ก | ๋ค์ต์คํธ๋ผ (0) | 2023.05.17 |
[Python] ๋ฐฑ์ค 13549 ์จ๋ฐ๊ผญ์ง 3 | ๋ค์ต์คํธ๋ผ (0) | 2023.05.17 |