๋ฌธ์
ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ์๋ก ๊ฒน์น๋ฉด ์ ๋๋ค.
- ๋ํ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ๋ณ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค. ์ฆ, ๊ผญ์ง์ ๊ณผ ๊ผญ์ง์ ๋ง ๋ง๋ฟ์ ์์ผ๋ฉด ์ ๋๋ค.
์ ์ฌ๊ฐํ 4๊ฐ๋ฅผ ์ด์ด ๋ถ์ธ ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํ ํธ๋ก๋ฏธ๋ ธ๋ผ๊ณ ํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ 5๊ฐ์ง๊ฐ ์๋ค.
์๋ฆ์ด๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ข ์ด ์์ ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ๋์ผ๋ ค๊ณ ํ๋ค. ์ข ์ด๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค.
ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ์ ์ ํ ๋์์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ค์ ํฉ์ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ ํธ๋ก๋ฏธ๋ ธ๋ ๋ฐ๋์ ํ ์ ์ฌ๊ฐํ์ด ์ ํํ ํ๋์ ์นธ์ ํฌํจํ๋๋ก ๋์์ผ ํ๋ฉฐ, ํ์ ์ด๋ ๋์นญ์ ์์ผ๋ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ข ์ด์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (4 ≤ N, M ≤ 500)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ข ์ด์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. i๋ฒ์งธ ์ค์ j๋ฒ์งธ ์๋ ์์์๋ถํฐ i๋ฒ์งธ ์นธ, ์ผ์ชฝ์์๋ถํฐ j๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์์ด๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 1,000์ ๋์ง ์๋ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ธ ์๋ค์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/14500
๐ก ํ์ด ๋ฐ ์ฝ๋
data = []
n, m = map(int, input().split())
for _ in range(n):
data.append(list(map(int, input().split())))
dx, dy = [-1, 1, 0], [0, 0, 1]
max_num = 0
def dfs(x, y, s, t, check):
if t == 4:
global max_num
max_num = max(max_num, s)
return
for i in range(3):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m or (nx, ny) in check:
continue
if t == 3:
if check[0][1]==check[1][1]==check[2][1]:
for j in [-1, 1]:
check_y = check[1][1] + j
if check_y < 0 or check_y >= m:
continue
dfs(check[1][0], check_y, s + data[check[1][0]][check_y], t + 1, check + [(check[1][0], check_y)])
elif check[0][0]==check[1][0]==check[2][0]:
for j in [-1, 1]:
check_x = check[1][0] + j
if check_x < 0 or check_x >= n:
continue
dfs(check_x, check[1][1], s + data[check_x][check[1][1]], t + 1, check + [(check_x, check[1][1])])
dfs(nx, ny, s + data[nx][ny], t + 1, check + [(nx, ny)])
for i in range(n):
for j in range(m):
dfs(i, j, data[i][j], 1, [(i, j)])
print(max_num)
DFS๋ฅผ ํ์ฉํ ๋ฐฑํธ๋ํน ๊ธฐ๋ฒ์ผ๋ก ํ์ดํ๋ค. ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ผ์ชฝ ์ขํ ํ์(y-1์ขํ)์ ์ ์ธ์์ผฐ๋ค. ํญ์ ์ค๋ณต ํ์์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ผ์ชฝ ์ขํ ํ์์ ์ ์ธ์์ผ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ค๋ณต ํ์์ด ๋ฐ์ํ๊ธด ํ์ง๋ง ์ ์ถ ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ง ์์ ๊ณ ๋ คํ์ง ์์๋ค. ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ์ ๊ฐ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์, ํ, ์ฐ ๋ฐฉํฅ์ ํ์ํ๋ฉฐ 4๊ฐ์ ์ขํ ์กฐํฉ์ ๋ง๋ค์ด ์ขํ ๊ฐ์ ํฉ์ ๊ตฌํ๊ณ , ๊ทธ ์ค ์ต๋๊ฐ์ ์ ์ญ๋ณ์์ ์ ์ฅํ๋ค.
๋จ, ์์ ๊ฐ์ ๋ชจ์์ ํ ํธ๋ก๋ฏธ๋ ธ๋ DFS ๋ฐฑํธ๋ํน์ผ๋ก ํ์ํ ์ ์๋ ์์ธ ์ํฉ์ด๋ค. ๋ฐ๋ผ์, ํ์ํ ์ขํ๊ฐ ์ผ๋ ฌ๋ก 3๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์ ๋ํด ์์ ๋ชจ์์ด ๋ง๋ค์ด์ง๋๋ก ํ๋ ์ขํ๋ ํ์ํ๋๋ก ๊ตฌํํ๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 20055๋ฒ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด - ํ์ด์ฌ(Python) (0) | 2022.04.01 |
---|---|
[BOJ] ๋ฐฑ์ค 16234๋ฒ ์ธ๊ตฌ ์ด๋ - ํ์ด์ฌ(Python) (1) | 2022.03.31 |
[BOJ] ๋ฐฑ์ค 3190๋ฒ ๋ฑ - ํ์ด์ฌ(Python) (3) | 2022.02.23 |
[BOJ] ๋ฐฑ์ค 1238๋ฒ ํํฐ - ํ์ด์ฌ(Python) (0) | 2022.01.19 |
[BOJ] ๋ฐฑ์ค 1261๋ฒ ์๊ณ ์คํ - ํ์ด์ฌ(Python) (0) | 2022.01.19 |