[Greedy search] 13305_주유소
내 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
N = int(input())
length = [int(x) for x in sys.stdin.readline().split()]
price = [int(x) for x in sys.stdin.readline().split()]
distance = 0
min_price = price[0]
answer = 0
for i in range(len(length)):
if price[i] < min_price:
answer += distance * min_price
min_price = price[i]
distance = length[i]
else:
distance += length[i]
answer += distance * min_price
print(answer)
length
: 도시 사이의 거리 입력price
: 도시의 기름 가격 입력distance
: 이동한 누적 거리min_price
: 누적 거리 이동 시 가장 낮았던 기름 가격
도시 사이의 거리 만큼의 iter 를 돌며 해당 조건을 탐색한다.
-
index에 해당하는 도시의 기름 가격이 더 낮을때
distance(현재까지의 주행거리) * min_price(누적 거리 이동 시 가장 낮았던 기름 가격) 을 answer 에 더하고, min_price 를 현재 도시의 기름 가격으로 초기화 하고, length[i] 는 현재 도시에서 출발했을 때의 길이 이므로 distance 에 더해준다.
-
index에 해당하는 도시의 기름 가격이 같거나 높을 때
다음 도시로의 이동거리를 distance 에 더해준다
이후 마지막에 남은 주행거리를 min_price 와 곱하여 더해준다
회고
이 문제는 아이디어의 생각이 잘 떠올라 풀 수 있었던 것 같다. 마지막 도시의 기름 가격은 생각하지 않아도 된다는 점에서 도시 사이의 거리 만큼의 iter 만 돌면 (도시의 기름값, 다음 도시로의 거리) 형태로 묶여 쉽게 풀 수 있었다.