Coding Test/Algorithms

[λ°±μ€€] 13305.μ£Όμœ μ†Œ/Python - Silver3

The Engineer, Lucy 2024. 11. 1. 23:03

β“λ¬Έμ œ

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

μ„±λŠ₯ μš”μ•½

λ©”λͺ¨λ¦¬: 46228 KB, μ‹œκ°„: 112 ms

 

문제 μ„€λͺ…

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

βœπŸ»ν’€μ΄

μš°λ¦¬λŠ” 제일 μ˜€λ₯Έμͺ½ λ„μ‹œκΉŒμ§€ κ°€λŠ” λ° μ΅œμ†Œ λΉ„μš©μœΌλ‘œ μ£Όμœ ν•΄μ•Ό ν•œλ‹€.
제일 μ™Όμͺ½ λ„μ‹œμ˜ μ£Όμœ μ†Œμ˜ 가격이 μ΅œμ†Œκ°’μ΄λΌκ³  μƒκ°ν–ˆμ„ λ•Œ 총 30이 λ‚˜μ˜¨λ‹€.
λͺ¨λ“  경우λ₯Ό κ³ λ €ν•˜μ—¬ κ³„μ‚°ν–ˆμ„ λ•Œ 5x2 + 2x(3+1)일 λ•Œκ°€ 18둜 κ°€μž₯ 적닀.
μ΄λ™ν•˜κΈ° μœ„ν•΄μ„œλŠ” 첫 μ£Όμœ μ†Œμ—μ„œλŠ” 무쑰건 주유λ₯Ό ν•΄μ•Ό ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ dp[0]은 μ²« μ£Όμœ μ†Œ κ°€κ²© * λ„λ‘œ κΈΈμ΄μ΄λ‹€.
κ·Έ λ‹€μŒ μ£Όμœ μ†Œμ—μ„œλŠ” 이전 μ£Όμœ μ†Œ κ°€κ²©κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ μ΅œμ†Œ κ°€κ²©μ„ κ³¨λΌ κ³„μ‚°ν•œλ‹€.
이전 μ£Όμœ μ†ŒλŠ” 5이고 ν˜„μž¬ λ„μ‹œμ˜ μ£Όμœ μ†ŒλŠ” 2이닀. κ·ΈλŸ¬λ―€λ‘œ 2λ₯Ό νƒν•œλ‹€.
κ·Έ λ‹€μŒ λ„μ‹œλŠ” 4둜 이전 λ„μ‹œμ˜ 가격이 더 적닀. λ”°λΌμ„œ 2x1을 λ”ν•œλ‹€.
이 같은 λ°©λ²•μœΌλ‘œ κ°€μž₯ 였λ₯Έμͺ½ λ„μ‹œμ— 도착할 λ•ŒκΉŒμ§€ μ΅œμ†Œ 가격 * λ„λ‘œ 길이λ₯Ό ν•˜μ—¬ μ΅œμ†Œ λΉ„μš©μ„ κ΅¬ν•œλ‹€.

πŸ’»μ½”λ“œ

# μ„œλΈŒνƒœμŠ€ν¬ 1 성곡(이전 μ£Όμœ μ†Œμ˜ κ°€κ²©ν•˜κ³ λ§Œ 비ꡐ)
import sys

input = sys.stdin.readline

n = int(input())
lengths = list(map(int, input().split()))
prices = list(map(int, input().split()))
dp = [0] * (n - 1)
dp[0] = lengths[0] * prices[0]

for i in range(1, n - 1):
    dp[i] = dp[i - 1] + min(lengths[i] * prices[i], lengths[i] * prices[i - 1])

print(dp[n - 2])
# μ •λ‹΅ μ½”λ“œ
import sys

input = sys.stdin.readline

n = int(input())
lengths = list(map(int, input().split()))
prices = list(map(int, input().split()))
dp = [0] * (n - 1)
dp[0] = lengths[0] * prices[0]

minCost = prices[0]
for i in range(1, n - 1):
    if minCost > prices[i]:
        minCost = prices[i]
    dp[i] = dp[i - 1] + minCost * lengths[i]

print(dp[n - 2])

πŸ“ν›„κΈ°

경우의 수λ₯Ό 따져놓고 이전 μ£Όμœ μ†Œμ˜ κ°€κ²©ν•˜κ³ λ§Œ λΉ„κ΅ν•˜μ—¬ μ„œλΈŒνƒœμŠ€ν¬ 1만 ν†΅κ³Όν–ˆλ‹€. μ£Όμ–΄μ§„ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ³΄μ•˜μ„ λ•Œ κ²°κ³Όκ°€ κ°™μ•„μ„œ λ§žλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ μ½”λ“œλ₯Ό λ‹€μ‹œ λ³΄λ‹ˆ 경우의 수λ₯Ό μ œλŒ€λ‘œ κ³ λ €ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€. 제발 문제 μ œλŒ€λ‘œ 읽고 μ—¬λŸ¬ 번 μƒκ°ν•˜μžπŸ˜‚