백준_13305_주유소

임정민·2023년 6월 2일
1

알고리즘 문제풀이

목록 보기
56/173
post-thumbnail

백준 그리디 문제풀이 입니다.

문제

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

[나의 풀이]

N = int(input())

distance = list(map(int, input().split()))
n_distance = len(distance)

price = list(map(int, input().split()))
n_price = len(price)

total_distance = sum(distance)
min_price = price[0] * total_distance
import itertools

permu = [i for i in range(total_distance + 1)]
print([permu] * n_distance)

print(permu)
for case in itertools.product(permu, permu, permu):
    flag = True
    prices = 0
    for i in range(n_distance):
        if sum(case[0:i]) < sum(distance[0:i]):
            flag = False
            break
    if flag:
        if sum(case) == total_distance:
            print(case)
            for i in range(n_distance):
                prices += case[i] * price[i]
            print(prices)
            if min_price > prices:
                min_price = prices

print(min_price)

틀린 풀이입니다. 문제 정의 자체는 어렵지 않았지만 주유소별로 주유 리터 경우의 수를 구하는 알고리즘이 복잡해져 해결하는데 어려움이 있었습니다. 그리하여 다른 사람의 코드를 참고하였습니다.🐻🐻🐻

[다른 사람의 풀이]

from sys import stdin

k = int(stdin.readline())
dist = list(map(int, stdin.readline().split()))
cost = list(map(int, stdin.readline().split()))
res = 0

c = cost[0]
for i in range(k - 1):
    if c > cost[i]:
        c = cost[i]
    res += c * dist[i]

print(res)

주유소별 리터당 가격을 확인하면서 현 주유소가 이전 주유소보다 싸다면 현 주유소에서 기름을 구매하는 방식입니다. 주유소별로 몇L씩 구매하는지 경우의 수를 파악하는 저의 풀이와 큰 차이가 있었고 훨씬 간단한 풀이였습니다.🐥🐥🐥

감사합니다.

profile
https://github.com/min731

0개의 댓글