dev/algorithm

BOJ / 11048번 / 이동하기 [Go][Python3]

crscnt 2021. 3. 26. 21:00

👩🏻‍💻 문제

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net


✍🏻 풀이

🎨 Go

// https://www.acmicpc.net/problem/11048
package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, m int
	fmt.Fscanln(reader, &n, &m)
	var candy = make([][]int, n+1)
	for i := 1; i < n+1; i++ {
		candy[i] = make([]int, m+1)
		for j := 1; j < m+1; j++ {
			fmt.Fscanf(reader, "%d ", &candy[i][j])
		}
	}
	var dp = make([][]int, n+1)
	for i := 0; i < n+1; i++ {
		dp[i] = make([]int, m+1)
	}
	for i := 1; i < n+1; i++ {
		for j := 1; j < m+1; j++ {
			dp[i][j] = int(math.Max(float64(dp[i-1][j]), float64(dp[i][j-1]))) + candy[i][j]
		}
	}
	fmt.Fprintln(writer, dp[n][m])
}

🎨 Python3

# https://www.acmicpc.net/problem/11048
import sys

if __name__ == "__main__":
    n, m = list(map(int, sys.stdin.readline().split()))
    candy = []
    for i in range(n):
        candy.append(list(map(int, sys.stdin.readline().split())))
    dp = [[0 for _ in range(m+1)] for _ in range(n+1)]
    for i in range(1, n+1):
        for j in range(1, m+1):
            dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + candy[i-1][j-1]
    print(dp[n][m])
728x90