문제 링크 : 백준 2096번
메모리 제한이 작아서 입력을 배열에다 할당하지 않고 바로 연산해야한다.
크기가 3인 max배열과 min배열을 만들어준다.
3개의 입력을 받고 dp스럽게 진행하면 된다.
⭐️ Go의 fmt패키지의 Scanf, Print는 매우 느려서 bufio를 사용해서 입출력 해야 시간초과가 발생하지 않는다.
package main
import (
"bufio"
"fmt"
"os"
)
var n int
var in int
var maxarr, minarr [3]int
func max(a int, b int) int {
if a < b {
return b
} else {
return a
}
}
func min(a int, b int) int {
if a < b {
return a
} else {
return b
}
}
func main() {
r := bufio.NewReader(os.Stdin)
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
fmt.Fscanf(r, "%d\n", &n)
fmt.Fscanf(r, "%d %d %d\n", &maxarr[0], &maxarr[1], &maxarr[2])
minarr[0] = maxarr[0]
minarr[1] = maxarr[1]
minarr[2] = maxarr[2]
for i := 1; i < n; i++ {
var a, b, c int
fmt.Fscanf(r, "%d %d %d\n", &a, &b, &c)
temp1 := maxarr[0]
temp2 := maxarr[1]
temp3 := maxarr[2]
maxarr[0] = max(temp1, temp2) + a
maxarr[1] = max(max(temp1, temp2), temp3) + b
maxarr[2] = max(temp2, temp3) + c
temp1 = minarr[0]
temp2 = minarr[1]
temp3 = minarr[2]
minarr[0] = min(temp1, temp2) + a
minarr[1] = min(min(temp1, temp2), temp3) + b
minarr[2] = min(temp2, temp3) + c
}
fmt.Fprintf(w, "%d %d\n", max(max(maxarr[0], maxarr[1]), maxarr[2]), min(min(minarr[0], minarr[1]), minarr[2]))
}