-
[๋ฐฑ์ค] 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ with PythonPS 2022. 6. 17. 11:50728x90๋ฐ์ํ
๐ BOJ 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ
๐ก ์กฐ๊ฑด
- ์๋์ ๊ฐ์ ์์ ์์๋ ๊ฐ์ด๋ฐ์ 2ร2 ๋ฐฐ์ด์ด ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ด๋ค.
- ์ฒซ์งธ ์ค์ n, m(1 โค n, m โค 1,000)์ด ์ฃผ์ด์ง๋ค.
๋ค์ n๊ฐ์ ์ค์๋ m๊ฐ์ ์ซ์๋ก ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
- nรm์ 0, 1๋ก ๋ ๋ฐฐ์ด์ด ์๋ค. ์ด ๋ฐฐ์ด์์ 1๋ก ๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
- DP, ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin """ """ n, m = map(int, stdin.readline().split()) arr = [] for _ in range(n): arr.append(list(map(int, list(stdin.readline().rstrip())))) ans = 0 dp = [[0] * (m + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, m + 1): if arr[i - 1][j - 1] == 1: dp[i][j] = min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1 ans = max(ans, dp[i][j]) print(ans ** 2)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
4 4 0100 0111 1110 0010
์คํ๊ฒฐ๊ณผ
4
โจ๏ธ ๋ฌธ์ ํ์ด
- ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋์ด๋ฅผ ๊ตฌํด์ผํ๋๋ฐ, ์ ์ฌ๊ฐํ์ด ๋๋ ์ํ๋ฅผ dp ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด์ ๊ฐ์ฅ ํฐ ๋ณ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
- ํ ์นธ๋ ์ ์ฌ๊ฐํ์ด ๋ ์ ์๊ธฐ์, ์ต์ ๋์ด์ ๊ฐ์ 1์ด๋ค.
- ํ์ฌ ์ํํ๊ณ ์๋ ์ขํ x, y ๋ฅผ ๊ธฐ์ค์ผ๋ก x-1, y-1 ์ด 1์ผ ๋
dp ๋ฆฌ์คํธ์ ํ์ฌ ์ํํ๋ ์ขํ x, y๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ, ์, ์ผ์ชฝ ๋๊ฐ์ ์ ์ดํด๋ณด๊ณ ๊ฐ์ฅ ์์ ๊ฐ + 1์ ๊ตฌํด
dp[x][y]์ ์ ์ฅํ๊ณ , ์ด ๊ฐ์ ans ๊ฐ๊ณผ ๋น๊ตํ์ฌ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
- ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ์ํํ๋ค๋ฉด, ์ ์ฅ๋ ans ๊ฐ์ ์ ๊ณฑํ์ฌ ๋์ด๋ฅผ ๊ตฌํ๊ณ ์ถ๋ ฅํ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 6236 ์ฉ๋ ๊ด๋ฆฌ with Python (0) 2022.06.17 [๋ฐฑ์ค] 2225 ํฉ๋ถํด with Python (0) 2022.06.17 [๋ฐฑ์ค] 1700 ๋ฉํฐํญ ์ค์ผ์ค๋ง with Python (0) 2022.06.16 [๋ฐฑ์ค] 1525 ํผ์ฆ with Python (0) 2022.06.14 [๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ with Python (0) 2022.06.14 - ์๋์ ๊ฐ์ ์์ ์์๋ ๊ฐ์ด๋ฐ์ 2ร2 ๋ฐฐ์ด์ด ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ด๋ค.