[μ½λνΈλ¦¬ μ±λ¦°μ§] 2μ£Όμ°¨ - DP
https://www.codetree.ai/missions/2/problems/maximin-path-in-square
μ½λνΈλ¦¬ | μ½λ©ν μ€νΈ μ€λΉλ₯Ό μν μκ³ λ¦¬μ¦ μ μ
κ΅κ°λνκ° λ§λ μ½λ© 곡λΆμ κ°μ΄λλΆ μ½λ© μμ΄λ³΄λΆν° κΏμ μ§μ₯ μ½ν ν©κ²©κΉμ§, κ΅κ°λνκ° μμ ν 컀리νλΌμΌλ‘ μ€λΉν΄λ³΄μΈμ.
www.codetree.ai
μ μ μ¬κ°ν μ΅μκ°μ μ΅λ
λ¬Έμ
νλ ¬μ΄ μ£Όμ΄μ‘μ λ, μμ μμνμ¬ μ€λ₯Έμͺ½ νΉμ λ°μΌλ‘λ§ μ΄λνμ¬ κ°λ€κ³ νμ λ κ±°μ³κ° μμΉμ μ νμλ μ«μλ€ μ€ μ΅μκ°μ μ΅λλ‘ νλ νλ‘κ·Έλ¨μ μμ±ν΄ 보μΈμ.
μ λ ₯ νμ
첫째 μ€μλ μ΄ μ£Όμ΄μ§λλ€.
λ λ²μ§Έ μ€λΆν° κ°μ μ€μ κ°κ° κ° νμ ν΄λΉνλ κ°μ μ μ κ°μ΄ 곡백μ μ¬μ΄μ λκ³ μ£Όμ΄μ§λλ€.
- νλ ¬μ μ£Όμ΄μ§λ μ«μ
μΆλ ₯ νμ
κ°λ₯ν κ²½λ‘μ μ«μλ€ μ€ μ΅μκ°μ μ΅λκ°μ μΆλ ₯ν©λλ€.
μ μΆλ ₯ μμ
μμ 1
μ λ ₯:
3
5 2 3
3 2 1
1 2 4
μΆλ ₯:
2
μμ 2
μ λ ₯:
3
4 3 2
3 4 5
4 2 8
μΆλ ₯:
3
μμ μ€λͺ
첫 λ²μ§Έ μμ μ κ²½μ° λ€μκ³Ό κ°μ΄ μ΄λνλ©΄ μ§λλ κ²½λ‘μ μ νμλ μ«μλ€ μ€ μ΅μκ°μ΄ κ° λλ©°, λ ν¬κ² λ΅μ λ§λ€ μκ° μμ΅λλ€.
μ ν
μκ°μ ν: 1000ms
λ©λͺ¨λ¦¬ μ ν: 80MB
νμ΄
μμμ (0, 0)κ³Ό 0λ²μ§Έ μ΄κ³Ό νμ μ΄κΈ°νν©λλ€. 0λ²μ§Έ νμ μκΈ° μμ κ³Ό λ°λ‘ μμ κ° μ€ μμ κ°μΌλ‘ μ΄κΈ°ννκ³ , 0λ²μ§Έ μ΄μ μκΈ° μμ κ³Ό μΌμͺ½μ κ° μ€ μμ κ°μΌλ‘ μ΄κΈ°νν©λλ€.
(1,1)λΆν° (n-1, n-1)κΉμ§ μ°μ°μ μνν©λλ€. μμ μ μΌμͺ½, μμ κ° μ€ ν° κ°κ³Ό μκΈ° μμ μ λΉκ΅νμ¬ μμ κ°μ dp λ°°μ΄μ μ μ₯ν©λλ€.
μ΅μ’ μ μΌλ‘ dp[n-1][n-1]μ κ°μ μΆλ ₯ν©λλ€.
μ νμ
dp[i][j] = min(max(dp[i-1][j], dp[i][j-1]), arr[i][j])
μ½λ
let n = Int(readLine()!)!
var arr = [[Int]]()
var dp = Array(repeating: Array(repeating: 0, count: n), count: n)
var minValue = 0
for _ in 0..<n {
arr.append(readLine()!.split(separator: " ").map{Int(String($0))!})
}
dp[0][0] = arr[0][0]
for i in 1..<n {
dp[i][0] = min(dp[i-1][0], arr[i][0])
}
for j in 1..<n {
dp[0][j] = min(dp[0][j-1], arr[0][j])
}
for i in 1..<n {
for j in 1..<n {
dp[i][j] = min(max(dp[i-1][j], dp[i][j-1]), arr[i][j])
}
}
print(dp[n-1][n-1])