Skip to content

Commit e1afd6f

Browse files
committed
[Gold V] Title: 게임을 클리어하자, Time: 792 ms, Memory: 45596 KB -BaekjoonHub
1 parent 254f57a commit e1afd6f

2 files changed

Lines changed: 106 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# [Gold V] 게임을 클리어하자 - 28017
2+
3+
[문제 링크](https://www.acmicpc.net/problem/28017)
4+
5+
### 성능 요약
6+
7+
메모리: 45596 KB, 시간: 792 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍
12+
13+
### 제출 일자
14+
15+
2026년 1월 25일 17:28:33
16+
17+
### 문제 설명
18+
19+
<p>산지니는 게임 '엘던 링'을 즐겨한다.</p>
20+
21+
<p>이 게임은 즐길 거리가 많기에 처음부터 게임을 다시 시작하는 회차 플레이가 유행이다. 한 번 클리어하면 1회차, 두 번 클리어하면 2회차를 돌았다고 한다.</p>
22+
23+
<p>회차마다 단검, 직검, 자검, 곡검, 마법 등 자신이 원하는 무기를 자유롭게 선택하여 시작할 수 있다.</p>
24+
25+
<p>산지니는 자존심이 강하여 회차 도중에 무기를 바꾸지 않고 끈기 있게 끝까지 클리어한다.</p>
26+
27+
<p>여러 회차를 진행할 예정인 산지니는 게임을 더 재미있게 즐기기 위해 바로 이전 회차의 무기는 사용하지 않기로 했다.</p>
28+
29+
<p>이 게임은 특이하게도 새로 시작할 때마다 능력치가 무작위로 조정되어서 자신에게 효율적인 무기가 달라진다.</p>
30+
31+
<p>최대한 효율적으로 게임을 클리어하고 싶은 산지니를 위해 최선의 무기를 선택한다면 얼마나 빨리 게임을 끝낼 수 있을지 알려주자.</p>
32+
33+
### 입력
34+
35+
<p>첫째 줄에 산지니가 게임을 몇 회차를 하는지 나타내는 수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N$</span></mjx-container>과 무기의 종류 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>M</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$M$</span></mjx-container>이 공백으로 구분되어 주어진다. <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mo class="mjx-n"><mjx-c class="mjx-c28"></mjx-c></mjx-mo><mjx-mn class="mjx-n"><mjx-c class="mjx-c32"></mjx-c></mjx-mn><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mi class="mjx-i" space="4"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi><mjx-mo class="mjx-n"><mjx-c class="mjx-c2C"></mjx-c></mjx-mo><mjx-mi class="mjx-i" space="2"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mn class="mjx-n" space="4"><mjx-c class="mjx-c35"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn><mjx-mo class="mjx-n"><mjx-c class="mjx-c29"></mjx-c></mjx-mo></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mn>2</mn><mo>≤</mo><mi>N</mi><mo>,</mo><mi>M</mi><mo>≤</mo><mn>500</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$(2 \le N, M \le 500)$</span> </mjx-container></p>
36+
37+
<p>둘째 줄부터 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N$</span></mjx-container>개의 줄에는 각 무기마다 게임을 클리어하는데 걸리는 시간 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-msub><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D461 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c31"></mjx-c></mjx-mn></mjx-script></mjx-msub><mjx-mo class="mjx-n"><mjx-c class="mjx-c2C"></mjx-c></mjx-mo><mjx-msub space="2"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D461 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c32"></mjx-c></mjx-mn></mjx-script></mjx-msub><mjx-mo class="mjx-n"><mjx-c class="mjx-c2C"></mjx-c></mjx-mo><mjx-mo class="mjx-n" space="2"><mjx-c class="mjx-c22EF"></mjx-c></mjx-mo><mjx-mo class="mjx-n" space="2"><mjx-c class="mjx-c2C"></mjx-c></mjx-mo><mjx-msub space="2"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D461 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mi class="mjx-i" size="s"><mjx-c class="mjx-c1D440 TEX-I"></mjx-c></mjx-mi></mjx-script></mjx-msub></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>t</mi><mn>1</mn></msub><mo>,</mo><msub><mi>t</mi><mn>2</mn></msub><mo>,</mo><mo>⋯</mo><mo>,</mo><msub><mi>t</mi><mi>M</mi></msub></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$t_1, t_2, \cdots, t_M$</span></mjx-container>이 공백으로 구분되어 주어진다. <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mo class="mjx-n"><mjx-c class="mjx-c28"></mjx-c></mjx-mo><mjx-mn class="mjx-n"><mjx-c class="mjx-c31"></mjx-c></mjx-mn><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-msub space="4"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D461 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mi class="mjx-i" size="s"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-script></mjx-msub><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mn class="mjx-n" space="4"><mjx-c class="mjx-c31"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn><mjx-mstyle><mjx-mspace style="width: 0.167em;"></mjx-mspace></mjx-mstyle><mjx-mn class="mjx-n"><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn><mjx-mo class="mjx-n"><mjx-c class="mjx-c29"></mjx-c></mjx-mo></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><msub><mi>t</mi><mi>i</mi></msub><mo>≤</mo><mn>10</mn><mstyle scriptlevel="0"><mspace width="0.167em"></mspace></mstyle><mn>000</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$(1 \le t_i \le 10\,000)$</span> </mjx-container></p>
38+
39+
<p>입력으로 주어지는 모든 수는 정수이다.</p>
40+
41+
### 출력
42+
43+
<p>회차마다 효율적인 무기를 선택하였을 때 총 클리어 시간의 최솟값을 출력하라.</p>
44+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.*
2+
import java.util.*
3+
4+
var dp = Array(1) { IntArray(1) }
5+
var N = 1
6+
var M = 1
7+
var T = Array(1) { IntArray(1) }
8+
9+
fun main() {
10+
val br = BufferedReader(InputStreamReader(System.`in`))
11+
var st = StringTokenizer(br.readLine())
12+
13+
N = st.nextToken().toInt()
14+
M = st.nextToken().toInt()
15+
16+
T = Array(N) { IntArray(M) { -1 } }
17+
18+
for(i in 0 until N) {
19+
st = StringTokenizer(br.readLine())
20+
for (j in 0 until M)
21+
T[i][j] = st.nextToken().toInt()
22+
}
23+
24+
dp = Array(N) { IntArray(M) { -1 } }
25+
for(i in 0 until M)
26+
dp[0][i] = T[0][i]
27+
28+
var ans = Int.MAX_VALUE
29+
for(i in 0 until M)
30+
ans = Math.min(ans, dfs(N - 1, i))
31+
32+
println(ans)
33+
34+
// for(i in 0 until N) {
35+
// for (j in 0 until M) {
36+
// print("${dp[i][j]} ")
37+
// }
38+
// println()
39+
// }
40+
}
41+
42+
fun dfs(round: Int, curWeapon: Int): Int {
43+
// println("$round $curWeapon")
44+
45+
if(dp[round][curWeapon] != -1)
46+
return dp[round][curWeapon]
47+
48+
var ret = Int.MAX_VALUE
49+
50+
for(i in 0 until M) {
51+
if (i == curWeapon)
52+
continue
53+
54+
ret = Math.min(ret, dfs(round - 1, i))
55+
}
56+
57+
ret += T[round][curWeapon]
58+
59+
dp[round][curWeapon] = ret
60+
61+
return dp[round][curWeapon]
62+
}

0 commit comments

Comments
 (0)