728x90
문제
https://www.acmicpc.net/problem/13305
해설
각 도시마다의 기름값이 나와있고, 기름 1L 당 1KM를 갈 수 있다.
우선 첫번째 도시에선 기름값이 얼마든지간에 기름을 넣어야 한다.
즉, 총 기름값을 저장할 변수를 total이라 했을 때, total의 초기값은 (첫 번째 도시의 기름값 + 첫 번째 도로의 길이)가 된다.
또한 맨 마지막 도시에선 더 갈 도로가 없으므로 기름값을 신경쓸 필요가 없다.
이는 반복문을 할 때 1부터 n-1까지만 확인해주면 된다는 것을 알 수 있다.
다음 도시의 기름값이 이전 도시의 기름값보다 비싸다면 이전 도시에서 기름을 더 많이 넣고 오는 것이 이득이다.
따라서 이전 도시의 기름값을 저장할 변수를 선언하여 이전 도시의 기름값이 더 싸다면 (이전 도시의 기름값 * 이동할 거리)를 total에 더해주면 된다.
코드
import java.util.*
private lateinit var road: LongArray
private lateinit var oilPrice: LongArray
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
road = LongArray(n - 1)
oilPrice = LongArray(n)
var st = StringTokenizer(readLine())
repeat(n - 1) { i ->
road[i] = st.nextToken().toLong()
}
st = StringTokenizer(readLine())
repeat(n) { i ->
oilPrice[i] = st.nextToken().toLong()
}
totalPrice(n)
}
private fun totalPrice(n: Int) {
var total = oilPrice[0] * road[0]
var curOilPrice = oilPrice[0]
for(i in 1 until n-1) {
if(oilPrice[i] < curOilPrice) {
curOilPrice = oilPrice[i]
}
total += curOilPrice * road[i]
}
println(total)
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 1240번: 노드사이의 거리 (0) | 2022.09.17 |
---|---|
[백준/BOJ] 1946번: 신입 사원 (1) | 2022.09.16 |
[백준/BOJ] 20040번: 사이클 게임 (0) | 2022.09.14 |
[백준/BOJ] 1005번: ACM Craft (0) | 2022.09.13 |
[백준/BOJ] 2473번: 세 용액 (0) | 2022.09.13 |
댓글