
์๊ฐ ๋ฐฉ์
DP ๋ฌธ์
2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ ๋ ฅ ๊ฐ์ ๋ค ๋ฃ์ด์ฃผ๊ธฐ
for loop์ ๋ ๋ฒ ์ฌ์ฉํด์ ์ฒ์์ row ํ์ธํ๊ณ ๋ค์์ผ๋ก๋ row์ ์๋ element๋ค ํ์ธํด ์ฃผ๊ธฐ
๋ฐ๋ณต๋ฌธ์ ํ์ฉํด์ ๊ฐ ํ์ ๊ฐ์ ์ ๋ฐ์ดํธํด ์ฃผ๊ธฐ
๋ง์ง๋ง ์ค์ ๊ฐ ์ค์ max๋ฅผ ์ฐพ์์ ํ๋ฆฐํธํด ์ฃผ๊ธฐ

๐ป ์์ฑ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val n = br.readLine().toInt()
# 2์ฐจ์ ๋ฐฐ์ด ๋ง๋ค์ด์ฃผ๊ธฐ
val arr = Array(n) { IntArray(n) }
# ๋ง๋ ๋ฐฐ์ด์ ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
for (i in 0 until n) {
val st = StringTokenizer(br.readLine())
for (j in 0..i) {
arr[i][j] = st.nextToken().toInt()
}
}
# update the array
for (i in 1 until n) {
for (j in 0..i) {
arr[i][j] += when (j) {
0 -> arr[i - 1][j]
i -> arr[i - 1][j - 1]
else -> maxOf(arr[i - 1][j], arr[i - 1][j - 1])
}
}
}
println(arr.last().maxOrNull())
}
โญ๏ธ์ฝ๋ ์ค๋ช
* 2์ฐจ์ ๋ฐฐ์ด ๋ง๋ค์ด์ฃผ๊ธฐ Array(n) { IntArray(n) }
Array(n): nํฌ๊ธฐ์ ์ผ์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๋ค
{ IntArray(n) }: ํ์ด n๊ฐ
๊ทธ๋ฌ๋ฏ๋ก ์ด ์ฝ๋๋ก ํฌ๊ธฐ๊ฐ n * n์ธ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๋ค
* ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ
StringTokenizer๋ ์ ๋ ฅํ ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ๋๋ ์ค๋ค
Java ํด๋์ค, ๊ทธ๋ฌ๋ฏ๋ก Kotlin์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
br.readLine()์ผ๋ก ํ ์ค์ ์ฝ์ด์ด
st๋ ์ฝ์ด์จ ํ ์ค์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ํ ํฐ์ผ๋ก ๋๋ ์ค
arr:
7 0 0 0 0
3 8 0 0 0
8 1 0 0 0
2 7 4 4 0
4 5 2 6 5
* ๋ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ
Case 1: when j = 0
์ฌ๊ธฐ์๋ j๊ฐ 0์ด๋ฏ๋ก ํ์ฌ ํ์ ์ ์ผ ์ผ์ชฝ์ ์์นํ๋ค, ์ด ๊ฐ์ ์ด์ ํ์ ๋์ผํ ์ด ๊ฐ์ ๋ํด์ค
Case 2: when j = i
์ฌ๊ธฐ์๋ j๊ฐ i์ด๋ฏ๋ก ํ์ฌ ํ์ ์ ์ผ ์ค๋ฅธ์ชฝ์ ์์นํ๋ค, ์ด ๊ฐ์ ์ด์ ํ์ ๋์ผํ ์ด ๊ฐ์ ๋ํด์ค
Case 3: when j = 0 < j < i
ํ์ฌ ํ์ ์ค๊ฐ์ ์์นํ๋ค, ์ด ๊ฐ์ ์ด์ ํ์ ํ์ฌ ์ด๊ณผ ๋ฐ๋ก ์ ์ด ์ค์์ ๋ ํฐ ๊ฐ์ ๋ํด์ค๋ค
# i = 1
arr:
7 0 0 0 0
10 8 0 0 0
8 1 0 0 0
2 7 4 4 0
4 5 2 6 5
# i = 2
arr:
7 0 0 0 0
10 15 0 0 0
18 16 15 0 0
2 7 4 4 0
4 5 2 6 5
i =1์ผ ๋ ๋ ๋ฒ์งธ ์ค์ 8์ ๋ณํ์ง ์๋ ์ด์
for (j in 0..i) -> 0๋ถํฐ 1๊น์ง ๋๋ฆฌ๋๊น 0์ผ ๋ ์ด๋ป๊ฒ ๋๋ค๊ณ -> Case1 ์ํฉ
Case 3
์ ์งธ ์ค์ 1์ด i=2์ผ ๋ 16์ผ๋ก ๋ณํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค
์? 10+1 = 11, 15+1=16 ์ด๋๊น ์ ์ผ ํฐ ๊ฑธ ์ฐพ์์ ์ ์ฅ!
Scanner๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, runtime ๋ฌธ์ ๋ก BufferedReader ์ฌ์ฉํ๊ธฐ
๊ทธ๋ฅ BufferedReader ์ฌ์ฉํ์, ๋๋์ ์
๋ ฅ์ ์ฒ๋ฆฌํ ๋ ์ด๊ฒ ์ฑ๋ฅ์ด ๋ ์ข๋ค. ์ด์ฐจํผ ์ฝ๋ฉํ
์คํธ์์๋ ๋ฌด์กฐ๊ฑด time complexity ์ค์ฌ์ผ ํ๋๊น
'์ฝ๋ฉ ํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 1308. D-Day (Silver V) [Python] (0) | 2024.02.19 |
|---|---|
| 1417. ๊ตญํ์์ ์ ๊ฑฐ (Silver V) [Python] (1) | 2024.02.19 |
| 1292. ์ฝ๊ฒ ํธ๋ ๋ฌธ์ (Bronze I) [Python] (0) | 2024.02.13 |
| 2579. ๊ณ๋จ ์ค๋ฅด๊ธฐ (Silver III) [Python] (0) | 2024.02.12 |
| 1000. A+B (Bronze V) [Kotlin] (0) | 2024.02.09 |