Lumpy Space Princess - Adventure Time
코딩테스트/백준

백준 [13305] - 주유소

yaebb_82 2023. 2. 10.

 

 

문제

 

13305번: 주유소

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

www.acmicpc.net

 

 

아이디어

: 리터 당 가격이 최솟값인 것을 기준으로 움직인다고 생각하기!

: 첫 도시의 주유소의 리터 당 가격을 최솟값으로 시작 → 이후에 이동하다가 해당 가격보다 더 싼 주유소를 발견? → 최솟값 갱신 

 

 

 

작성한 코드

N = int(input())
km = list(map(int, input().split()))
price = list(map(int, input().split()))

total = 0
min_price = price[0]

for i in range(N-1):
    if min_price > price[i]:
        min_price = price[i]
    total += (min_price * km[i])

print(total)

- 첫째줄 : 도시의 개수 → N

- 둘째줄 : 각 도시간의 거리 → km (공백을 기준으로 list에 저장)

- 셋째줄 : 각 도시의 주유소의 리터 당 가격 → price (공백을 기준으로 list에 저장)

- 왼쪽 → 오른쪽 도시로 이동하는 최소의 비용 → total (0으로 초기화)

- 처음에는 price의 0번째 인덱스의 값을 최솟값(min_price)라고 생각한다.

- 거리는 N-1개이기 때문에, range(N-1) 만큼만 for문을 돌려준다.

- 이때 min_price와 비교해서, min_price보다 작다면 갱신시켜주고 → min_price에 거리를 곱해줘서 total에 누적합을 해준다.

- 최종적으로 total의 값을 print()로 출력해준다.

 

 

 

반응형

'코딩테스트 > 백준' 카테고리의 다른 글

백준[2231] - 분해합  (0) 2023.02.11
백준[2798] - 블랙잭  (0) 2023.02.11
백준 [1541] - 잃어버린 괄호  (0) 2023.02.07
백준 [11399] - ATM  (0) 2023.02.07
백준 [1931] - 회의실 배정  (0) 2023.02.02

댓글