# 17점
# 제일 왼쪽(0)에서 제일 오른쪽(n-1)까지 가는 최소 비용.
# 현재 가격이 다음 가격보다 비싸거나 같다면 - 필요한만큼만 사기
# 현재 가격이 다음 가격보다 싸다면 - 다음 길이까지 구매하기
n = int(input())
road = list(map(int, input().split()))
oil = list(map(int, input().split()))
cost = 0
for i in range(len(oil)-1):
if i != 0 and oil[i-1] < oil[i]:
continue
if oil[i] >= oil[i+1]:
cost += oil[i] * road[i]
elif oil[i] < oil[i+1]:
cost += (oil[i] * road[i]) + (oil[i] * road[i+1])
print(cost)
위와 같이 코드를 작성했을때는 부분점수만 받을 수 있었다. 현재 가격과 다음 가격만을 비교하고 있었기때문에 그랬던것같다.
"""
46236KB 120ms
"""
# 100점
# 제일 왼쪽(0)에서 제일 오른쪽(n-1)까지 가는 최소 비용.
# 현재보다 작은 가격이 나올때까지 계속 앞에 있는걸로 구매. = 최소값으로 계속 구매
import sys
input = sys.stdin.readline
n = int(input())
road = list(map(int, input().split()))
oil = list(map(int, input().split()))
min_cost = 1e9 # 최소값 초기화
result = 0 # 결과값
for i in range(len(oil)-1): # 마지막은 계산하지 않아도 되니까 -1
if oil[i] < min_cost: # 현재 기름값이 최소값보다 작다면 최소값 교체
min_cost = oil[i]
result += min_cost * road[i] # 최소값 * 도로 길이 더해줌
print(result)
수정된 코드는 최소값을 찾아서 현재 최소값보다 작은 가격이 나올때까지 최소값으로 거리만큼의 기름을 구입하도록 했다. 조금만 더 고민했으면 한번에 100점을 맞을수도 있었을것같은데 조금 아쉽다.
https://www.acmicpc.net/problem/13305
13305번: 주유소
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1
www.acmicpc.net
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 5972번 : 택배 배송 (0) | 2024.04.15 |
---|---|
[백준] 파이썬 1713 : 후보 추천하기 (0) | 2024.04.15 |
[프로그래머스] 파이썬 : 크레인 인형뽑기 게임 (0) | 2024.04.11 |
[백준] 파이썬 17144번 : 미세먼지 안녕! (1) | 2024.04.11 |
[백준] 파이썬 1939 : 중량제한 (0) | 2024.04.09 |