-
[Prefix Sum] BOJ 20002 ์ฌ๊ณผ๋๋ฌดAlgorithms in Python/baekjoon 2021. 2. 3. 14:52
๐ ๋ฐฑ์ค 20002 ์ฌ๊ณผ๋๋ฌด
20002๋ฒ: ์ฌ๊ณผ๋๋ฌด
N × N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๋ชจ์ ๊ณผ์์์ด ์๊ณ , N × N ๊ฐ์ ์ฌ๊ณผ๋๋ฌด๊ฐ 1 × 1 ํฌ๊ธฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ชจ๋ ์นธ์ ์ฌ์ด์ ธ์๋ค. ๋๋ถ ํ๊ณค์ด๊ฐ ๊ฐ์์ ๋ง์ ์ฌ๊ณผ๋ฅผ ์ํํ๋ ค๋๋ฐ, ๋ ์ฃผ์ธ ์ ์์ด๊ฐ "๋๋ ๊ณผ์์
www.acmicpc.net
โ ๋ฌธ์ ์ ํต์ฌ, ํ์ด ๊ณผ์
• N × N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๋ชจ์ ๊ณผ์์์ด ์๊ณ , ํ๊ณค์ด๋ ์ฌ๊ณผ๋๋ฌด๋ฅผ K × K ์ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๋ชจ์์ผ๋ก๋ง ์ํํด ๊ฐ์ ธ๊ฐ ์ ์๋ค.
• ๋๋ฌด์ ์์น๋ฅผ ์ขํ๋ก ํ์ฌ, ์ด์ด์ต์ด 2์ฐจ์ ๋ฐฐ์ด์ ํํ๋ก ์ฃผ์ด์ง๋ค.
• ํ๊ณค์ด๊ฐ ์ฌ๊ณผ๋๋ฌด๋ฅผ K × K ์ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๋ชจ์์ผ๋ก ๊ฐ์ ธ๊ฐ ๋ ์ต๋ ์ด์ด์ต์ ๊ตฌํด์ผ ํ๋ค.
=> 1~K ๊น์ง์ ์ ์ฌ๊ฐํ์ ์ค์ ํ๊ณ ๊ณผ์์ ๋ฒ์๋งํผ ์์ ํ์ํ์ฌ ์ต๋ ์ด์ด์ต์ ๊ตฌํ ์ ์๋ค.
=> ๋ํ, Prefix Sum์ ์ด์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
pre[i][j]์ (0,0)~(i, j) ๊น์ง์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ค. arr[i][j]๋ ์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ด์ต์ด๋ค.
pre[i][j] = pre[i][j-1] + pre[i-1][j] - pre[i-1][j-1] + arr[i][j]
๊ณผ์์ ๋ฒ์ ์์์ ์์์ (i, j), ๋์ ์ด(i+k, j+k)์ธ ์ ์ฌ๊ฐํ์ ์ด์ด์ต
profit = pre[i+k][j+k] - pre[i-1][j+k] - pre[i+k][j-1] + pre[i-1][j-1]
โ ์ ์ฒด ์ฝ๋
import sys input = sys.stdin.readline n = int(input()) pre = [[-1001]*(n+1) for _ in range(n+1)] # (i, j)๊น์ง์ ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ for i in range(1, n+1): arr = list(map(int, input().split())) for j in range(1, n+1): pre[i][j] = pre[i][j-1] + pre[i-1][j] - pre[i-1][j-1] + arr[j-1] max_profit = pre[0][0] # ์ ์ฌ๊ฐํ์ผ๋ก ์๋ฅธ๋ค. for k in range(n): for i in range(1, n-k+1): for j in range(1, n-k+1): # ์์์ ์ ์์์ (i, j), ๋์ ์ด(i+k, j+k)์ธ ์ ์ฌ๊ฐํ์ ์ด์ด์ต profit = pre[i+k][j+k] - pre[i-1][j+k] - pre[i+k][j-1] + pre[i-1][j-1] max_profit = max(max_profit, profit) # ์ต๋ ์ด์ด์ต ์ ๋ฐ์ดํธ print(max_profit)
'Algorithms in Python > baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Union-Find] BOJ 10775 ๊ณตํญ (0) 2021.02.08 [Stack] BOJ 17299 ์ค๋ฑํฐ์ (0) 2021.02.03 [Sliding Window] BOJ 10025 ๊ฒ์ผ๋ฅธ ๋ฐฑ๊ณฐ (0) 2021.02.03 [DFS/BFS] BOJ 18405 ๊ฒฝ์์ ์ ์ผ (0) 2021.02.01 [DFS/BFS] BOJ 16234 ์ธ๊ตฌ ์ด๋ (0) 2021.02.01