์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ - 14500๋ฒ ํ ํธ๋ก๋ฏธ๋ ธ
๋ฌธ์
ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ์๋ก ๊ฒน์น๋ฉด ์ ๋๋ค.
- ๋ํ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ๋ณ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค. ์ฆ, ๊ผญ์ง์ ๊ณผ ๊ผญ์ง์ ๋ง ๋ง๋ฟ์ ์์ผ๋ฉด ์ ๋๋ค.
์ ์ฌ๊ฐํ 4๊ฐ๋ฅผ ์ด์ด ๋ถ์ธ ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํ ํธ๋ก๋ฏธ๋ ธ๋ผ๊ณ ํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ 5๊ฐ์ง๊ฐ ์๋ค.
์๋ฆ์ด๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ข ์ด ์์ ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ๋์ผ๋ ค๊ณ ํ๋ค. ์ข ์ด๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค.
ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ์ ์ ํ ๋์์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ค์ ํฉ์ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ ํธ๋ก๋ฏธ๋ ธ๋ ๋ฐ๋์ ํ ์ ์ฌ๊ฐํ์ด ์ ํํ ํ๋์ ์นธ์ ํฌํจํ๋๋ก ๋์์ผ ํ๋ฉฐ, ํ์ ์ด๋ ๋์นญ์ ์์ผ๋ ๋๋ค.\
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ข ์ด์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (4 ≤ N, M ≤ 500)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ข ์ด์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. i๋ฒ์งธ ์ค์ j๋ฒ์งธ ์๋ ์์์๋ถํฐ i๋ฒ์งธ ์นธ, ์ผ์ชฝ์์๋ถํฐ j๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์์ด๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 1,000์ ๋์ง ์๋ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ธ ์๋ค์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ1
5 5
1 2 3 4 5
5 4 3 2 1
2 3 4 5 6
6 5 4 3 2
1 2 1 2 1
์์ ์ถ๋ ฅ1
19
ํ์ด
- ํ ํธ๋ก๋ฏธ๋ ธ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐฐ์ด์ ๋ด์์ค๋ค. ์ด 19๊ฐ์ง
- ํ ํธ๋ก๋ฏธ๋ ธ์ ์๋งํผ ๋ฐ๋ณต๋ฌธ์ด ๋๊ณ , ๊ฐ ํ ํธ๋ก๋ฏธ๋ ธ์ ํฉ์ ๋น๊ตํ์ฌ ํฐ ๊ฐ์ answer์ ๋ฃ๋๋ค.
- Pypy3์ผ๋ก ์ ์ถํด์ผ ์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์๋๋ค
# 14500๋ฒ. ํ
ํธ๋ก๋ฏธ๋
ธ
n, m = map(int, input().split())
# ๋ฐฉ๋ฒ 1) ํ
ํธ๋ก๋ฏธ๋
ธ ๋ชจ๋ ๊ตฌํด์ ํ์ธํ๊ธฐ - ๋จ, pypy3์ผ๋ก ํด์ผ ์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์์
# ํ
ํธ๋ก๋ฏธ๋
ธ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐฐ์ด์ ๋ด๋๋ค
tetromino = [
[[0, 0], [0, 1], [1, 0], [1, 1]], # 1)
[[0, 0], [0, 1], [0, 2], [0, 3]], # 2)
[[0, 0], [1, 0], [2, 0], [3, 0]], # 3)
[[0, 0], [0, 1], [0, 2], [-1, 2]], # 4)
[[0, 0], [1, 0], [2, 0], [2, 1]], # 5)
[[0, 0], [1, 0], [0, 1], [0, 2]], # 6)
[[0, 0], [0, 1], [1, 1], [2, 1]], # 7)
[[0, 0], [0, 1], [-1, 1], [-1, 2]], # 8)
[[0, 0], [1, 0], [1, 1], [2, 1]], # 9)
[[0, 0], [0, 1], [0, 2], [-1, 1]], # 10)
[[0, 0], [1, 0], [2, 0], [1, 1]], # 11)
[[0, 0], [0, 1], [0, 2], [1, 1]], # 12)
[[0, 0], [0, 1], [-1, 1], [1, 1]], # 13)
[[0, 0], [0, 1], [1, 1], [1, 2]], # 14)
[[0, 0], [1, 0], [1, -1], [2, -1]], # 15)
[[0, 0], [1, 0], [1, 1], [1, 2]], # 16)
[[0, 0], [0, 1], [1, 0], [2, 0]], # 17)
[[0, 0], [0, 1], [0, 2], [1, 2]], # 18)
[[0, 0], [1, 0], [2, 0], [2, -1]] # 19)
]
paper = [list(map(int, input().split())) for _ in range(n)]
answer = 0
for x in range(n):
for y in range(m):
for t in range(0, 19): # ํ
ํธ๋ก๋ฏธ๋
ธ์ ๊ฒฝ์ฐ์ ์ ๋งํผ
sum = 0
for i in range(4):
nx = x + tetromino[t][i][0]
ny = y + tetromino[t][i][1]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
break
sum += paper[nx][ny]
answer = max(answer, sum)
print(answer)
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๊ตฌํ
- ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ
์ฐธ๊ณ ์ฌ์ดํธ
- DFS ์ฌ์ฉํ์ฌ ํผ ๋ฐฉ๋ฒ๊ณผ ํ์ด์ฌ3์ผ๋ก ์ ์ถํด๋ ์๊ฐ์ด๊ณผ ๋์ง ์๋ ์ง์ ๋ชจ๋ ํ ํธ๋ก๋ฏธ๋ ธ์ ํจ์๋ฅผ ๊ตฌํํ์ฌ ํผ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์๋ค.