๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S2] ๋ฐฑ์ค€ 14430๋ฒˆ ์ž์› ์บ๊ธฐ

by immgga 2024. 9. 30.

์ถœ์ฒ˜: unsplash.com

 

์ž์› ์บ๊ธฐ(14430๋ฒˆ)

Silver 2

#๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

https://www.acmicpc.net/problem/14430

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

wook์ด 0, 0์—์„œ n, m๊นŒ์ง€ ์ด๋™ํ•  ๋•Œ, ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•˜๋ฉด์„œ ์ž์›์„ ์บ˜ ์ˆ˜ ์žˆ์„ ๋•Œ, n, m๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์„ ๋•Œ, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ž์›์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ž์› ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž…๋ ฅ ์˜ˆ์ œ 1์„ ์˜ˆ๋กœ ์„ค๋ช…ํ•ด ์ฃผ๊ฒ ๋‹ค.

5 4
0 1 0 0
0 0 1 0
1 1 0 0
1 0 1 0
1 1 0 0

// init dp array
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

 

์ฒ˜์Œ์˜ 0, 0 ๋ถ€๋ถ„์€ ์ž…๋ ฅ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด 2์ฐจ์› array๋ฅผ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์„ ๋•Œ 0, 0์—๋Š” 0 ๋˜๋Š” 1์ด ์˜ค๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋‹ค์Œ array์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ๋Š” ๋„ฃ์„ ์œ„์น˜์˜ ์™ผ์ชฝ ๊ฐ’๊ณผ ์œ„์ชฝ ๊ฐ’ ์ค‘ ๋” ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋™์„ ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜์ชฝ์œผ๋กœ๋ฐ–์— ์ด๋™์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ array์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ ๊ตฌํ•  ๋•Œ๋Š” ์œ„์ชฝ์˜ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ฒซ ์ค„์˜ ์ž…๋ ฅ์€ 0 1 0 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— array์˜ ์ฒซ ์ค„์˜ ๊ตฌ์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์•„์ง„๋‹ค.

// array์˜ ์ฒซ ์ค„
0 1 1 1

์ž…๋ ฅ์˜ 2๋ฒˆ์งธ์— 1์ด ์žˆ์–ด์„œ ๊ทธ ์ดํ›„์˜ ๊ฐ’๋„ ๋ชจ๋‘ 1์ด ๋œ๋‹ค.

์ด์ „์˜ ๊ฐ’(์™ผ์ชฝ ๊ฐ’)์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ์œ„์˜ ๊ฐ’๊ณผ ์™ผ์ชฝ์˜ ๊ฐ’์„ ๋ชจ๋‘ ํ™•์ธํ•ด์„œ ๋” ํฐ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ dp array๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.

// ์ตœ์ข… array
0 1 1 1
0 1 2 2
1 2 2 2
2 2 3 3
3 4 4 4

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.InputStreamReader
import java.io.BufferedReader
import kotlin.math.max

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (h, w) = readLine().split(" ").map { it.toInt() }
    val dp = Array(h) { Array(w) { 0 } }

    for (i in 0 until h) {
        val mine = readLine().split(" ").map { it.toInt() }

        if (i == 0) dp[i][0] = mine[0]
        else {
            if (mine[0] == 1) dp[i][0] = dp[i-1][0] + 1
            else dp[i][0] = dp[i-1][0]
        }

        for (j in 1 until mine.size) {
            if (i == 0) {
                if (mine[j] == 1) dp[i][j] = dp[i][j-1] + 1
                else dp[i][j] = dp[i][j-1]
            } else {
                if (mine[j] == 1) dp[i][j] = max(dp[i - 1][j] + 1, dp[i][j - 1] + 1)
                else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
            }
        }
    }

    println(dp.last().last())
}

 

๋ฌธ์ œ ํ’€์ด

์ฒซ ์ค„์„ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ๋Š” ์™ผ์ชฝ ๊ฐ’๋งŒ ์‚ฌ์šฉํ•ด ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ค„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋•Œ ์œ„์˜ ๊ฐ’๋งŒ ์‚ฌ์šฉํ•ด ์ฃผ๊ณ  ๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ๋Š” ์œ„์™€ ์™ผ์ชฝ ๊ฐ’์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•ด ์ค€๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋‹ค์‹œํ”ผ dp array๊ฐ€ ๊ตฌ์„ฑ๋˜๊ฒŒ ๋˜๊ณ  ๊ทธ ๊ฐ’์˜ ๋งˆ์ง€๋ง‰ ์ค„์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

dp ๋ฌธ์ œ ์น˜๊ณ ๋Š” ์ƒ๊ฐํ•˜๋Š” ๊ฒŒ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค.

2์ฐจ์› dp ๋ฌธ์ œ์˜ ์ˆœํ•œ ๋ง› ๋ฒ„์ „์ธ ๋“ฏํ•˜๋‹ค.

728x90