아이공의 AI 공부 도전기

[Baekjoon] 13305번 : 주유소 (Python)

 

     

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

Python

 

방법 1 - 메모리 45752KB / 시간 160ms / 코드 길이 285B

 

주어진 값들에 대한 순차적으로 진행 & 비교해야 한다.

중요한 시점은 도시의 리터당 가격이 이전 도시들에 존재하는 리터당 최소 가격보다 작다면 현재 있는 도시의 리터당 가격을 기반으로 주유를 진행한다.

다만 만약 이전 도시들에 존재하는 리터당 최소 가격 값보다 큰 값이라면 이전 주유소에서 기름을 채워야하므로 이전 주유소 값* 채울 리터를 곱해서 sum을 진행한다.

 

다만 여기서 중요한 것은 도시 리터당 가격 최솟값은 1이기 때문에 만약 도시의 리터당 가격이 1원이라면 그값을 기준으로 남은 모든 리터를 더해 sum을 진행한다.

 

import sys
input=sys.stdin.readline
n=int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
min_v=b[0]
s=0
for i in range(n-1):
    if b[i] == 1:
        s += sum(a[i:])
        break
    if b[i] < min_v:
        min_v = b[i]
    s += a[i]*min_v
print(s)

 

 

방법 2 - 메모리 45748KB / 시간 136ms / 코드 길이 215B

방법 1을 조금 더 간소화한 버전

import sys
input=sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
s, m = 0, b[0]
for i,j in zip(a,b[:-1]):
    if j < m:
        m = j
    s += i*m
print(s)

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading