๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 14500_ํ ํธ๋ก๋ฏธ๋ ธ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ
์ ์ฌ๊ฐํ์ ์๋ก ๊ฒน์น๋ฉด ์ ๋๋ค.
๋ํ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
์ ์ฌ๊ฐํ์ ๋ณ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค. ์ฆ, ๊ผญ์ง์ ๊ณผ ๊ผญ์ง์ ๋ง ๋ง๋ฟ์ ์์ผ๋ฉด ์ ๋๋ค.
์ ์ฌ๊ฐํ 4๊ฐ๋ฅผ ์ด์ด ๋ถ์ธ ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํ ํธ๋ก๋ฏธ๋ ธ
์๋ฆ์ด๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ข ์ด ์์ ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ๋์ผ๋ ค๊ณ ํ๋ค.
์ข ์ด๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค.
ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ์ ์ ํ ๋์์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ค์ ํฉ์ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑ
ํ ํธ๋ก๋ฏธ๋ ธ๋ ๋ฐ๋์ ํ ์ ์ฌ๊ฐํ์ด ์ ํํ ํ๋์ ์นธ์ ํฌํจํ๋๋ก ๋์์ผ ํ๋ฉฐ, ํ์ ์ด๋ ๋์นญ์ ์์ผ๋ ๋๋ค.
์ฒซ์งธ ์ค์ ์ข ์ด์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (4 ≤ N, M ≤ 500)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ข ์ด์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ค.
i๋ฒ์งธ ์ค์ j๋ฒ์งธ ์๋ ์์์๋ถํฐ i๋ฒ์งธ ์นธ, ์ผ์ชฝ์์๋ถํฐ j๋ฒ์งธ ์นธ์ ์ฐ์ฌ ์๋ ์
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 1,000์ ๋์ง ์๋ ์์ฐ์
์ฒซ์งธ ์ค์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ธ ์๋ค์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
# 1) DFS
N, M = map(int, input().split())
graph = []
for i in range(N) :
graph.append(list(map(int, input().split())))
max_val = max(map(max, graph))
visited = [[False] * M for _ in range(N)]
# ์ํ์ข์ฐ
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
result = 0
def dfs(x, y, step, total) :
global result
# ์ต๋๊ฐ ๋ชป ๋๊ธฐ๋ฉด ์ข
๋ฃ
if total + max_val * (4 - step) <= result :
return
# ๋ธ๋ก 4๊ฐ ๋ค์ฐ๋ฉด ์ข
๋ฃ
if step == 4 :
result = max(result, total)
return
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
# ๋ฒ์๋ด ์๊ณ , ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if 0 <= nx < N and 0 <= ny < M and not visited[nx][ny] :
# ๋ธ๋ก ์ฐ๊ฒฐ ํ ใ
, ใ
, ใ
, ใ
๋ชจ์ ๋ง๋ค๊ธฐ
if step == 2 :
visited[nx][ny] = True # ํ์ํจ
dfs(x, y, step + 1, total+graph[nx][ny])
visited[nx][ny] = False # ํ์ ์ ๊ฑฐ
visited[nx][ny] = True
dfs(nx, ny, step + 1, total+graph[nx][ny])
visited[nx][ny] = False
for i in range(N) :
for j in range(M) :
visited[i][j] = True
dfs(i, j, 1, graph[i][j])
visited[i][j] = False
print(result)
# input
# 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
# output
# 19
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 14503_๋ก๋ด ์ฒญ์๊ธฐ (1) | 2022.10.11 |
---|---|
[BAEKJOON python] 14502_์ฐ๊ตฌ์ (0) | 2022.10.10 |
[BAEKJOON python] 14499_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.10.10 |
[BAEKJOON python] 3190_๋ฑ (0) | 2022.10.10 |
[BAEKJOON python] 12100_2048(easy) (0) | 2022.10.10 |
Comments