알고리즘/문제풀이
[백준] 13305번 주유소 - 파이썬(Python)
SeongOnion
2021. 7. 28. 00:56
728x90
문제 (링크)
https://www.acmicpc.net/problem/13305
13305번: 주유소
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1
www.acmicpc.net
나의 풀이
n = int(input())
ans = 0
cities = list(map(int, input().split()))
prices = list(map(int, input().split()))
min_price = 1000000000
min_price_index = -1
for i in range(n-1):
if prices[i] < min_price:
min_price = prices[i]
min_price_index = i
for i in range(n-1):
if i == min_price_index:
ans += (prices[i] * sum(cities[i:]))
break
else:
ans += (prices[i] * cities[i])
print(ans)
풀이법 및 코드 설명
아이디어 자체는 금방 떠올릴 수 있었다.
가격 가장 적은 도시에서 최대한 많이 사고, 그 외의 도시에서는 당장 이동하는데 필요한 만큼만 사주면 되는 문제였다.
가격이 가장 적은 곳을 첫 번째 for문을 통해 찾아주었다. 아마 굳이 for문을 직접 작성해주는게 아닌 다른 함수를 호출해서 사용할 수도 있었겠지만, 당장 기억이 나지 않아서 그냥 for문으로 처리해줬다.
이후 두 번째 for문에서는 앞서 구한 최소 가격의 인덱스가 나오면 앞으로 필요한 기름을 모두 사고, 그렇지 않으면 당장 이동에 필요한 기름만 사도록 구현해주었다.
하지만 부분 점수만 받고 통과하지 못했다.
다른 풀이
n = int(input())
cities = list(map(int, input().split()))
prices = list(map(int, input().split()))
ans = 0
min_price = prices[0]
for i in range(n-1):
if prices[i] < min_price:
min_price = prices[i]
ans += min_price * cities[i]
print(ans)
이전 코드처럼 최소 가격을 구하기 위해 따로 반복문을 도는 것이 아닌, 가격을 실제로 더하는 과정에서 최소 가격을 확인해줄 수 있다.