ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
N X M์ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง ๋, ํ์ฌ ์์น์์ (1, 0), (0, 1), (1, 1)๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก ์ด๋ํ ์ ์๋ค. ์ผ์ชฝ ๊ฐ์ฅ ์๋ฐฉ์์ ์ถ๋ฐํ์ฌ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ธ N, M์ ๋์ฐฉํ ๋ ์ต๋๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ์ฌํ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ์ ๋ ฅ๋ฐ์ ๊ทธ๋ํ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค ํ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์์ ์ ๋ ฅ 2๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ ์ ์๋ค.
๊ธฐ์กด์ ๊ทธ๋ํ๋ฅผ ์์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด ์ ํ์ `graph[i][j] += max(graph[i - 1][j], graph[i][j - 1], graph[i - 1][j - 1])`์ ํตํด ๋ฌธ์ ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
์์ ์ ๋ ฅ 2์ ์ ๋ต์ ์ฐพ๋ ๊ณผ์ ์ ์์ ์ ํ์๊ณผ ๊ฐ์ด ํ์ฌ ์์น์์ ๋ฐ์ํ๊ณ ์ ํ๋ ๊ฐ์ ์ ํํ์ฌ N, M์ด ๋์์ ๋ 3์ด๋ผ๋ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
์ ํ์์ ์ด์ฉํ ํ์ด
from sys import stdin
if __name__ == "__main__":
n, m = map(int, stdin.readline().split())
graph = [[0] + list(map(int, stdin.readline().split())) for _ in range(n)]
graph.insert(0, [0] * (m + 1))
for i in range(1, n + 1):
for j in range(1, m + 1):
graph[i][j] += \
max(graph[i][j - 1], graph[i - 1][j], graph[i - 1][j - 1])
print(graph[n][m])
BFS๋ฅผ ์ด์ฉํ ํ์ด
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < n and 0 <= y < m
def bfs(start):
q = deque([start])
visited[0][0] = graph[0][0]
while q:
cur_x, cur_y = q.popleft()
for x, y in ((1, 0), (0, 1), (1, 1)):
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y):
sum_candy = visited[cur_x][cur_y] + graph[next_x][next_y]
if visited[next_x][next_y] < sum_candy:
visited[next_x][next_y] = sum_candy
q.append([next_x, next_y])
return visited[-1][-1]
if __name__ == "__main__":
n, m = map(int, stdin.readline().split())
visited = [[-1] * m for _ in range(n)]
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
print(bfs([0, 0]))
visited๋ฅผ ๋ฐฉ๋ฌธ ํ์ ๋, ์ฌํ์ ๊ฐ์๊ฐ ๋ฐ์๋๋๋ก ํ๋ฉด BFS๋ฅผ ํตํด์๋ ๋ต์ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง ๋น์ฐํ๊ฒ๋ BFS๊ฐ DP๋ณด๋ค ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2293 ๋์ 1 (0) | 2020.08.26 |
---|---|
๋ฐฑ์ค: 1890 ์ ํ (0) | 2020.08.25 |
๋ฐฑ์ค: 14503 ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2020.08.24 |
๋ฐฑ์ค: 16954 ์์ง์ด๋ ๋ฏธ๋ก ํ์ถ (0) | 2020.08.24 |
๋ฐฑ์ค: 15558 ์ ํ ๊ฒ์ (0) | 2020.08.23 |