https://www.acmicpc.net/problem/13305
문제 풀이
틀린 풀이
- 이 때 생각은 cost의 값들 중에서 최소값만 찾아 최소값이 나오기 전까지는 다음 목적지까지 가기위한 기름만 사고
- 최소값이 나오면 끝까지 갈 기름을 사면 된다고 생각했다
- 하지만 해당 테스트 케이스를 진행했을 때 틀린 것을 확인할 수 있었다
5
1 1 1 1
9 11 5 12 1
- 해당 테스트 케이스에서 내 코드는 9에서 한번 11에서 한번 5에서 두번을 해서 30이 나와 실패했지만
- 정상적인 답은 9에서 2번 5에서 2번 가야 답 28이 나온다
n = int(input())
length = list((map(int, input().split())))
cost = list((map(int, input().split())))
# 해당 값이 최소 값이 아니면 다음목적지까지 가기위한 기름만 넣음
# 만약 해당값이 최소값이면 끝까지의 거리값 * 리터당가격 해줌
min_cost = min(cost[:len(cost)-1])
result = 0
flag = False
# print(min_cost)
for i in range(n-1):
# print(length[i], cost[i])
if cost[i] == min_cost:
flag = True
result += length[i] * min_cost
else:
if flag == False:
result += length[i] * cost[i]
else:
result += length[i] * min_cost
print(result)
정답 코드
- 해당 코드에서 min_cost값을 무한으로 먼저 초기화 하고 for문을 돌면서 min_cost값보다 현재 cost[i]이 작으면 min_cost값을 갱신할 수 있도록 했다
n = int(input()) # 도시 개수
length = list((map(int, input().split()))) # 거리
cost = list((map(int, input().split()))) # 비용
min_cost = 987654321
# 매번 최소 비용이 갱신되도록 해줌
for i in range(n-1):
if cost[i] < min_cost:
min_cost = cost[i]
result += length[i] * cost[i]
print(result)