알고리즘

[BOJ/그리디] 13305 주유소

motti 2023. 5. 15. 20:26
반응형

문제 링크 : https://www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net


풀이

#리스트 생성
city_num = int(input())
liter_lst = list(map(int,input().split()))
cost_lst = list(map(int,input().split()))

#처음 시작 비용 설정
min_liter = cost_lst[0]

answer = 0

#휴게소에서 더 작은 코인(비용)이 생기면 갱신 아니면 기존 비용으로 계산
for coin,liter in zip(cost_lst[:-1],liter_lst):
    if coin <= min_liter:
        min_liter = coin
        answer += min_liter*liter
    else:
        answer += min_liter*liter
print(answer)
  • 휴게소에서 더 작은 코인(비용)이 생기면 갱신 아니면 기존 비용으로 계산이라는 방법을 떠올리니 쉽게 해결 되었다.
  • for문에서 zip을 사용하면 길이가 같지만 서로 다른 리스트를 튜플형태로 묶어준다
  • 문제에서 도시의 수인 N의 조건이 100,000이하 였는데 보통 10만이면 이중반복문을 했을때 시간초과가 나기에 한번만에 푸는 방법을 생각해야한다. N이 1000이하일때는 이중반복문을 사용해도 된다.
    • 참고! 문제의 입력 크기와 알고리즘의 구현에 따라서 시간 초과가 발생할 수 있는 시점은 다르다.
반응형