알고리즘 백준 13305 주유소(파이썬)
백준 주유소 파이썬
백준 파이썬 주유소
코드
if __name__ == '__main__':
import sys
N = int(sys.stdin.readline())
roadLength = list(map(int,input().split()))
oilCost = list(map(int,input().split()))
minCost = roadLength[0]*oilCost[0] #첫번째꺼의 비용
currentCost=oilCost[0]
for i in range(1,N-1):
if oilCost[i] < currentCost: #여태까지 채워온 주유소가격(현재주유소가격)과 도착한곳의 주유소가격을 비교해서 도착한곳이 더 작으면
currentCost = oilCost[i] #현재 주유소 가격은 도착한곳의 주유소 가격으로 바꾼다
minCost += currentCost*roadLength[i] #앞으로 한칸 갈 정도의 도로길이는 현재주유소 가격으로 계산한다
print(minCost)
문제풀이
0) 그리디 문제로
우선, 맨 처음엔 무조건 첫번째 주요소에서 다음의 갈 거리만큼 주유를 해야한다 -> roadLength[0]*oilCost[0]
해당 문제에서의 핵심은 내가 여태까지 주유한 주유소의가격(currentCost)와 내가 도착한 주유소의 가격(oilCost)를 비교하여 더 작은 주유소 가격만(그리디) 남겨서 도로의 길이만큼 계산해 준다는 것이다
또한 그 전 까지의 운행(가장 싼 주유소에 도착하기전)은 그 전에 주유소 가격들 중에서 싼 가격으로 주유를 해야하기 때문에 for문으로 주유소 가격을 비교하여 갱신하는 것이 필요하다!
그다음엔 첫번째 주유소값(currentCost) 과 다음 주유소값(oilCost[i])를 비교하여 첫번째 주유소값(currentCost)가 크다면 첫번째 주유소값(currentCost)으로 다음 주유소 까지의 거리만큼 최솟값에 더해주고
그게 아니라 다음 주유소값(oilCost[i])가 크다면 currentCost를 다음 주유소값(oilCost[i])로 바꾸어 주고 다음 주유소 까지의 거리만큼 최솟값에 더해준다
이와 같은 방식으로 끝까지 for문으로 진행한다
깃허브
'알고리즘' 카테고리의 다른 글
알고리즘 그리디 - 거스름돈(java) (0) | 2022.09.28 |
---|---|
알고리즘 백준 1920 수 찾기(파이썬) (0) | 2022.02.17 |
알고리즘 백준 1541 잃어버린 괄호(파이썬) (0) | 2022.02.05 |
알고리즘 백준 1931 회의실배정(파이썬) (0) | 2022.02.05 |
알고리즘 백준 11047 동전0(파이썬) (0) | 2022.02.04 |