-
[๋ฐฑ์ค] 14502 ์ฐ๊ตฌ์ with PythonPS 2022. 1. 24. 20:28728x90๋ฐ์ํ
๐ BOJ 14502 ์ฐ๊ตฌ์
๐ก ์กฐ๊ฑด
์ฐ๊ตฌ์๋ ํฌ๊ธฐ๊ฐ NรM์ธ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ง์ฌ๊ฐํ์ 1ร1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
์๋ก ์ธ์ธ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ 3๊ฐ์ด๋ฉฐ, ๊ผญ 3๊ฐ๋ฅผ ์ธ์์ผ ํ๋ค.
๋ฒฝ์ 3๊ฐ ์ธ์ด ๋ค, ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ณณ์ ์์ ์์ญ์ด๋ผ๊ณ ํ๋ค.
์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 โค N, M โค 8)
0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น์ด๋ค. 2์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
DFS + BFS, ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin from collections import deque n, m = map(int, stdin.readline().split()) board = [] virus_xy = [] for i in range(n): data = list(map(int, stdin.readline().split())) board.append(data) for j in range(len(data)): if data[j] == 2: virus_xy.append((i, j)) score = -1e9 dx, dy = [1, 0, 0, -1], [0, 1, -1, 0] def get_score(board): global score cnt = 0 for x in range(n): for y in range(m): if board[x][y] == 0: cnt += 1 score = max(score, cnt) def insfection(x, y, board): q = deque() q.append((x, y)) while q: a, b = q.popleft() for i in range(4): nx, ny = a + dx[i], b + dy[i] if -1 < nx < n and -1 < ny < m: if board[nx][ny] == 0: board[nx][ny] = 2 q.append((nx, ny)) def solutions(cnt): if cnt == 3: new_board = [item[:] for item in board] for x, y in virus_xy: insfection(x, y, new_board) get_score(new_board) else: for x in range(n): for y in range(m): if board[x][y] == 0: board[x][y] = 1 cnt += 1 solutions(cnt) cnt -= 1 board[x][y] = 0 solutions(0) print(score)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
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
์คํ๊ฒฐ๊ณผ
27
โจ๏ธ ๋ฌธ์ ํ์ด
๋งต์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉด์, ๋ฐ์ด๋ฌ์ค์ ์์น๋ฅผ virus_xy ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
์์ ์์ญ์ ์ต๋๊ฐ์ ๋ด์ ๋ณ์ score ๋ฅผ -int(1e9)๋ก ์ด๊ธฐํํ๋ค.
์ด ๋ฌธ์ ์ ํ์ด๋ฅผ ์ํด์ ์ฌ์ฉํ ํจ์๋ ์ด 3๊ฐ์ด๋ค.
- get_score(board) : ์์ ์์ญ์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ์ฌ ์ต๋๊ฐ์ผ ๊ฒฝ์ฐ score ๊ฐฑ์
- insfection(x, y, board) : ๋ฒฝ์ ์ธ์ฐ๊ณ , ๋ฐ์ด๋ฌ์ค๊ฐ ์ด๋ํ๋ฉฐ ๊ฐ์ผ. ๋ณด๋๋ฅผ ๊ฐฑ์ . BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ.
- solutions(cnt) : 3๊ฐ์ ๋ฒฝ์ ์ธ์ธ ์ ์๊ฒ cnt๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ. DFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ.
์ค์นํ ๋ฒฝ์ ๊ฐ์๊ฐ 3๊ฐ๊ฐ ๋ ๋๊น์ง DFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๋งต์ ๊ฐฑ์ ํ๋ค.
๋ฒฝ์ด 3๊ฐ๊ฐ ์ค์น ๋์๋ค๋ฉด, ์๋ก์ด ๋ณด๋๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ผ์ ์์ผ์ค๋ค.์๋ก์ด ๋ณด๋๋ฅผ ๊ฐ์ผ์ํจ ํ, score ๊ณ์ฐ์ ํ๋ค.
๊ณ์ฐํ score ๊ฐ์ด ์ต๋๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฐฑ์ ํ๋ค.
๐พ ๋๋์
- PyPy3 ๋ก ์ฑ์ ํ์ฌ ํต๊ณผํ๋ค.
- DFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒฝ์ 3๊ฐ ์ค์นํ ํ, BFS๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ผ, score ๊ณ์ฐํ๋ ๋ก์ง์ ์ดํดํ๋ ๊ฒ์ด ์ฒ์์ ์ด๋ ค์ ๋ค.
- ๋ฌธ์ ๋ฅผ ํ๊ณ ์ ๋งค์ฐ ๋ค๋ฆ๊ฒ ๋ธ๋ก๊ทธ ํฌ์คํ ์ ํ๋ ๊ฒ์ธ๋ฐ, ๋ก์ง์ ์ดํดํ๋ ๋น์ทํ ์ ํ์ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ด ํ์คํ ์์ํด์ก๋ค.
- ์ฌ๊ธฐ์ ์กฐ๊ธ ๋ ์์ฉ์ ํ์๋ฉด, ๋ฒฝ์ ์ค์นํ๋์ง ์ํ๋์ง์ state๋ฅผ ์ ์ฅํ
dp ๋ฐฐ์ด์ ๋ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ์ ํตํด ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ ์ ์ฌ๋ฌธ์ ๋ ์์๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14916 ๊ฑฐ์ค๋ฆ๋ with Python (0) 2022.01.26 [๋ฐฑ์ค] 14888 ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ with Python (0) 2022.01.24 [๋ฐฑ์ค] 11504 ๋๋ ค ๋๋ ค ๋๋ฆผํ! with Python (0) 2022.01.11 [๋ฐฑ์ค] 10819 ์ฐจ์ด๋ฅผ ์ต๋๋ก with Python (0) 2022.01.11 [๋ฐฑ์ค] 9461 ํ๋๋ฐ ์์ด with Python (0) 2022.01.10