algorithm/Greedy

백준 13305 주유소

hw.kr 2022. 8. 28. 00:51

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

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

📌 해결순서

문제는 길고 복잡해 보이지만 문제를 이해하고 나서, 딱 그리디 유형의 표준문제라고 생각했다.

문제를 이해한 후 내가 생각한 해결 아이디어는 다음과 같다.

 

1. 첫번째 도시에서 다음 도시로 가기 위해서는 첫번째 도시의 기름 가격이 얼마든지 상관없이 기름가격 * 도로길이 만큼 비용을 사용한다

2. 두번째 도시부터는 첫번째 도시의 기름가격보다 두번째 도시의 기름가격이 더 싸면 두번째 도시의 기름을 사용하고 아니면 첫번째 도시의 기름을 계속 사용한다

3. 모든 도시의 기름 가격을 반복해서 비교하면서 마지막 도시까지 이동한다

4. 마지막 도시는 주유소를 사용하지 않기 때문에 비교 대상이 아니다.

📌 코드

import sys
input = sys.stdin.readline

n = int(input())
road = list(map(int, input().split()))
oils = list(map(int, input().split()))

curr_cost = oils[0]
cost = curr_cost * road[0]

for i in range(1, n - 1):
    if(curr_cost > oils[i]):
        curr_cost = oils[i]

    cost += curr_cost * road[i]

print(cost)

'algorithm > Greedy' 카테고리의 다른 글

백준 2839 설탕배달  (0) 2022.08.29
백준 1744 두 수 묶기  (0) 2022.08.29
백준 2812 크게 만들기  (0) 2022.08.28
백준 1931 회의실 배정  (0) 2022.08.28
백준 1946 신입사원  (0) 2022.08.26