λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
"곡뢀" π‘Ÿπ‘’π‘π‘œπ‘Ÿπ‘‘/π΄π‘™π‘”π‘œπ‘Ÿπ‘–π‘‘β„Žπ‘š

[Python/λ°±μ€€] 13305 : [그리디 μ•Œκ³ λ¦¬μ¦˜] μ£Όμœ μ†Œ

by ΰ·† Yoni ΰ·† 2022. 1. 28.
728x90

13305 : [그리디 μ•Œκ³ λ¦¬μ¦˜] μ£Όμœ μ†Œ

μ‹œκ°„ μ œν•œ: 2 Sec  λ©”λͺ¨λ¦¬ μ œν•œ: 512 MB

 

 

13305번: μ£Όμœ μ†Œ

ν‘œμ€€ μž…λ ₯으둜 λ‹€μŒ 정보가 주어진닀. 첫 번째 μ€„μ—λŠ” λ„μ‹œμ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N(2 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” μΈμ ‘ν•œ 두 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” λ„λ‘œμ˜ 길이가 제일 μ™Όμͺ½ λ„λ‘œλΆ€ν„° N-1

www.acmicpc.net

 

 

문제 μ„€λͺ…

μ–΄λ–€ λ‚˜λΌμ— N개의 λ„μ‹œκ°€ μžˆλ‹€. 이 λ„μ‹œλ“€μ€ 일직선 λ„λ‘œ μœ„μ— μžˆλ‹€. νŽΈμ˜μƒ 일직선을 μˆ˜ν‰ λ°©ν–₯으둜 λ‘μž. 제일 μ™Όμͺ½μ˜ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½μ˜ λ„μ‹œλ‘œ μžλ™μ°¨λ₯Ό μ΄μš©ν•˜μ—¬ μ΄λ™ν•˜λ €κ³  ν•œλ‹€. μΈμ ‘ν•œ 두 λ„μ‹œ μ‚¬μ΄μ˜ λ„λ‘œλ“€μ€ μ„œλ‘œ 길이가 λ‹€λ₯Ό 수 μžˆλ‹€. λ„λ‘œ 길이의 λ‹¨μœ„λŠ” kmλ₯Ό μ‚¬μš©ν•œλ‹€.

처음 μΆœλ°œν•  λ•Œ μžλ™μ°¨μ—λŠ” 기름이 μ—†μ–΄μ„œ μ£Όμœ μ†Œμ—μ„œ 기름을 λ„£κ³  μΆœλ°œν•˜μ—¬μ•Ό ν•œλ‹€. κΈ°λ¦„ν†΅μ˜ ν¬κΈ°λŠ” λ¬΄μ œν•œμ΄μ–΄μ„œ μ–Όλ§ˆλ“ μ§€ λ§Žμ€ 기름을 넣을 수 μžˆλ‹€. λ„λ‘œλ₯Ό μ΄μš©ν•˜μ—¬ 이동할 λ•Œ 1kmλ§ˆλ‹€ 1λ¦¬ν„°μ˜ 기름을 μ‚¬μš©ν•œλ‹€. 각 λ„μ‹œμ—λŠ” 단 ν•˜λ‚˜μ˜ μ£Όμœ μ†Œκ°€ 있으며, λ„μ‹œ λ§ˆλ‹€ μ£Όμœ μ†Œμ˜ 리터당 가격은 λ‹€λ₯Ό 수 μžˆλ‹€. κ°€κ²©μ˜ λ‹¨μœ„λŠ” 원을 μ‚¬μš©ν•œλ‹€.

예λ₯Ό λ“€μ–΄, 이 λ‚˜λΌμ— λ‹€μŒ 그림처럼 4개의 λ„μ‹œκ°€ μžˆλ‹€κ³  ν•˜μž. 원 μ•ˆμ— μžˆλŠ” μˆ«μžλŠ” κ·Έ λ„μ‹œμ— μžˆλŠ” μ£Όμœ μ†Œμ˜ 리터당 가격이닀. λ„λ‘œ μœ„μ— μžˆλŠ” μˆ«μžλŠ” λ„λ‘œμ˜ 길이λ₯Ό ν‘œμ‹œν•œ 것이닀.

제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 6λ¦¬ν„°μ˜ 기름을 λ„£κ³ , 더 μ΄μƒμ˜ 주유 없이 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€ μ΄λ™ν•˜λ©΄ 총 λΉ„μš©μ€ 30원이닀. λ§Œμ•½ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 2λ¦¬ν„°μ˜ 기름을 λ„£κ³ (2×5 = 10원) λ‹€μŒ 번 λ„μ‹œκΉŒμ§€ μ΄λ™ν•œ ν›„ 3λ¦¬ν„°μ˜ 기름을 λ„£κ³ (3×2 = 6원) λ‹€μŒ λ„μ‹œμ—μ„œ 1λ¦¬ν„°μ˜ 기름을 λ„£μ–΄(1×4 = 4원) 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ μ΄λ™ν•˜λ©΄, 총 λΉ„μš©μ€ 20원이닀. 또 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 2λ¦¬ν„°μ˜ 기름을 λ„£κ³ (2×5 = 10원) λ‹€μŒ 번 λ„μ‹œκΉŒμ§€ μ΄λ™ν•œ ν›„ 4λ¦¬ν„°μ˜ 기름을 λ„£κ³ (4×2 = 8원) 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€ μ΄λ™ν•˜λ©΄, 총 λΉ„μš©μ€ 18원이닀.

각 λ„μ‹œμ— μžˆλŠ” μ£Όμœ μ†Œμ˜ 기름 가격과, 각 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” λ„λ‘œμ˜ 길이λ₯Ό μž…λ ₯으둜 λ°›μ•„ 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ μ΄λ™ν•˜λŠ” μ΅œμ†Œμ˜ λΉ„μš©μ„ κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

ν‘œμ€€ μž…λ ₯으둜 λ‹€μŒ 정보가 주어진닀. 첫 번째 μ€„μ—λŠ” λ„μ‹œμ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ N(2 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” μΈμ ‘ν•œ 두 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” λ„λ‘œμ˜ 길이가 제일 μ™Όμͺ½ λ„λ‘œλΆ€ν„° N-1개의 μžμ—°μˆ˜λ‘œ 주어진닀. λ‹€μŒ μ€„μ—λŠ” μ£Όμœ μ†Œμ˜ 리터당 가격이 제일 μ™Όμͺ½ λ„μ‹œλΆ€ν„° μˆœμ„œλŒ€λ‘œ N개의 μžμ—°μˆ˜λ‘œ 주어진닀. 제일 μ™Όμͺ½ λ„μ‹œλΆ€ν„° 제일 였λ₯Έμͺ½ λ„μ‹œκΉŒμ§€μ˜ κ±°λ¦¬λŠ” 1이상 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€. 리터당 가격은 1 이상 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

ν‘œμ€€ 좜λ ₯으둜 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ 제일 였λ₯Έμͺ½ λ„μ‹œλ‘œ κ°€λŠ” μ΅œμ†Œ λΉ„μš©μ„ 좜λ ₯ν•œλ‹€. 

μž…λ ₯ μ˜ˆμ‹œ 1

4
2 3 1
5 2 4 1

좜λ ₯ μ˜ˆμ‹œ 1

18

μž…λ ₯ μ˜ˆμ‹œ 2

4
3 3 4
1 1 1 1

좜λ ₯ μ˜ˆμ‹œ 2

10

My μ½”λ“œ

# 원 μ•ˆμ˜ 숫자: 리터당 가격
# λ„λ‘œ μœ„ 숫자: λ„λ‘œ 길이
# 1km λ‹Ή 1L μ‚¬μš©

# N: λ„μ‹œμ˜ 개수

N = int(input())

dist = list(map(int, input().split())) # 각 λ„λ‘œ 거리 (N-1 개)
oil = list(map(int, input().split())) # 각 λ„μ‹œμ˜ 리터당 주유 가격(원)

# μ΅œμ†Œ λΉ„μš© μ΄ˆκΈ°κ°’: 제일 μ™Όμͺ½ λ„μ‹œμ—μ„œ κ·Έ λ‹€μŒ λ„μ‹œλ‘œλ§Œ κ°€λŠ”λ° λ“œλŠ” 주유 가격
cost = dist[0] * oil[0]

# μ§€λ‚˜μ˜¨ λ„μ‹œλ“€ 쀑 제일 μ‹Ό 주유 가격 λ³€μˆ˜ μ΄ˆκΈ°κ°’: 제일 μ™Όμͺ½ λ„μ‹œ 주유 가격
min_oil = oil[0]

# λ‘λ²ˆμ§Έ λ„μ‹œλΆ€ν„° λ§ˆμ§€λ§‰ λ„μ‹œκΉŒμ§€ κ°€λŠ” λ™μ•ˆ
# min_oil 보닀 μ‹Ό 주유 가격이 λ‚˜μ˜¨λ‹€λ©΄
# κ·Έ κ°€κ²©μœΌλ‘œ λΉ„μš© μΆ”κ°€ and min_oil κ°’ κ°±μ‹ 
for i in range(1, N - 1):
    if oil[i] < min_oil:
        cost += dist[i] * oil[i]
        min_oil = oil[i]
    else:
        cost += dist[i] * min_oil

# μ΅œμ†Œ λΉ„μš© 좜λ ₯
print(cost)
728x90

λŒ“κΈ€