2022. 7. 14. 16:17γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
λ¬Έμ μ€λͺ
μ΄λ€ λλΌμ 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 μ΄νμ μμ°μμ΄λ€.
μΆλ ₯
νμ€ μΆλ ₯μΌλ‘ μ μΌ μΌμͺ½ λμμμ μ μΌ μ€λ₯Έμͺ½ λμλ‘ κ°λ μ΅μ λΉμ©μ μΆλ ₯νλ€.
μλΈνμ€ν¬
μμ μ μΆλ ₯
νμ΄ μ λ΅
λμ κ°μμ 거리, κΈ°λ¦κ°μ΄ κ΅μ₯ν ν° μκ° λμ¬ μλ μμ΄μ μ€λ²νλ‘μ°(overflow)λ₯Ό κ±±μ νλλ°, Python3μ μ μν λ²μμ μ νμ΄ μλκ΅°μ. κ·Έλμ λ³ κ±±μ μμ΄ κ·Έλλ‘ μ¬μ©νμ΅λλ€. μ λ λ€μκ³Ό κ°μ΄ νμμ΅λλ€.
- μ λ ₯λ°μ λ, λͺ¨λ 거리μ μ΄ν©κ³Ό κ°μ₯ κ° μΌ κΈ°λ¦ κ°μ λ³λλ‘ μ μ₯ν΄λλ€.
- νμ¬ λ΄κ° 머무λ₯΄λ λμμ κΈ°λ¦κ° ≤ λ€μ λμμ κΈ°λ¦κ°
- λ€μ λμκΉμ§ 거리λ§νΌμ κΈ°λ¦μ ꡬ맀νλ€.
- μ΄λ 거리μ λ€μ λμκΉμ§μ 거리λ§νΌμ μΆκ°νλ€.
- κ·Έ λ€μ λμμ κΈ°λ¦ κ°μ μ΄ν΄λ³Έλ€.
- κ·Έ λ€μ λμ μμ λΉμΈλ€λ©΄ μ κ³Όμ λ°λ³΅
- νμ¬ λ΄κ° 머무λ₯΄λ λμμ κΈ°λ¦κ° > λ€μ λμμ κΈ°λ¦κ°
- λ€μ λμκΉμ§ 거리λ§νΌμ κΈ°λ¦μ ꡬ맀νλ€.
- μ΄λ 거리μ λ€μ λμκΉμ§μ 거리λ§νΌμ μΆκ°νλ€.
- λͺ¨λ 거리μ μ΄ν©μμ μ΄λνλ§νΌμ 거리λ₯Ό λΊλ€.
- μ΄λ 거리λ₯Ό 0μΌλ‘ λ€μ μ΄κΈ°ννλ€.
- λ§μ§λ§ λμμ μ λμμ λμ°©νλ€λ©΄ λ¨μ 거리λ§νΌ κΈ°λ¦μ μ¬λ©΄ λ
- λ§μ½ μ€κ°μ κΈ°λ¦μ΄ κ°μ₯ μΌ λμμ λμ°©νλ€λ©΄, λ¨μ μ΄ κ±°λ¦¬λ§νΌ κΈ°λ¦μ μ¬κ³ λ
μλ리μ€
- μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ λμ 5κ°κ° μ‘΄μ¬νλ€κ³ κ°μ ν©μλ€.
- μ λ ₯ λ°μ λ, μ΄ κ±°λ¦¬μ ν©κ³Ό μ μΌ μΌ κΈ°λ¦κ°μ λ³λλ‘ μ μ₯ν΄λ‘λλ€.
- λ λ²μ§Έ λμλ₯Ό μ΄ν΄λ³΄λ νμ¬ λμλ³΄λ€ κΈ°λ¦ κ°μ΄ λΉμλλ€. λ λ²μ§Έ λμκΉμ§μ κΈ°λ¦μ ꡬ맀νκ³ , μ΄λ 거리λ₯Ό μ μ₯ν©λλ€.
- κ·Έ λ€μ λμλ μ΄ν΄λ³΄λ μμ λΉμλλ€. λ λ²μ§Έ λμμμ μΈ λ²μ§Έ λμ μ¬μ΄μ 거리λ§νΌ κΈ°λ¦ κ°μ ꡬ맀νκ³ κ±°λ¦¬λ μ μ₯ν΄μ€λλ€.
- λ€ λ²μ§Έ λμλ₯Ό μ΄ν΄λ³΄λ, νμ¬ λμλ³΄λ€ κΈ°λ¦ κ°μ΄ μλλ€. νμ§λ§ λ€ λ²μ§Έ λμλ‘ κ°κΈ° μν΄μλ μΈ λ²μ§Έ λμμ λ€ λ²μ§Έ λμ μ¬μ΄μ 거리λ§νΌ κΈ°λ¦λ νμνλ―λ‘ κ΅¬λ§€ν΄μ€λλ€.
- 첫 λ²μ§Έ λμμμ λ€ λ²μ§Έ λμκΉμ§ κ°λλ° κ±Έλ¦¬λ 거리λ₯Ό μ΄ κ±°λ¦¬μμ λΉΌμ€λλ€. ( 12 - 7 = 5km)
- μ΄λ 거리λ₯Ό 0μΌλ‘ μ΄κΈ°νν΄μ€λλ€.
- λ€ λ²μ§Έ λμμ μ보λ μλλ¦¬μ€ μ’
λ£ μ‘°κ±΄ λ κ°λ₯Ό λͺ¨λ λ§μ‘±ν©λλ€.
- λ§μ§λ§ μ λμκΉμ§ μ¨ μν©μΌ κ²½μ°
- μ μΌ κ° μΌ κΈ°λ¦ κ°μ 보μ νκ³ μλ λμμΌ κ²½μ°
- λ μ€ νλλ§ λ§μ‘±ν΄λ λκ³ , λ μ€ μ΄λ κ±Έ νλλΌλ λκ°μ κ²°κ³Όμ΄λ―λ‘ μ§νν΄μ€λλ€.
μ΄λ‘μ¨ μ΅μ λΉμ© 50μλ§νΌλ§ κΈ°λ¦μ ꡬ맀νλ©΄ μ΄λμ μλ£ν μ μμ΅λλ€.
λ§μ½ μ€κ°μ μ μΌ μΌ κΈ°λ¦ κ°μ κ°μ§λ λμλ₯Ό λ§λκ² λλ©΄ μ΄λ»κ² λ κΉμ?
μ€κ°μ μ μΌ κ° μΌ κΈ°λ¦κ°μ λμλ₯Ό λ§λ κ²½μ°
- μ μλ리μ€μμ λ λ²μ§Έ λμμ λ€ λ²μ§Έ λμλ§ λ°κΏλ³΄μμ΅λλ€.
- νμ¬ λμμμ λ€μ λμλ₯Ό 보λ, νμ¬ λμλ³΄λ€ κΈ°λ¦κ°μ΄ μλλ€. λ€μ λμκΉμ§ 거리λ§νΌμ κΈ°λ¦λ§ ꡬ맀νκ³ , μ΄ κ±°λ¦¬μμ ν΄λΉ 거리λ₯Ό λΉΌμ€μλ€.
- λ λ²μ§Έ λμμ μ 보λ, μ μΌ κΈ°λ¦ κ°μ΄ μΌ λμμ λλ€. μ΄ κ²½μ° λ¨μ μ΄ κ±°λ¦¬λ§νΌ μ¬κΈ°μ κΈ°λ¦μ ꡬ맀νλ©΄ λλ―λ‘, λ€μ λ¨μ λμλ€μ μ΄ν΄λ³Ό νμκ° μμ΅λλ€.
μ΄λ‘μ¨, κΈ°λ¦ κ°μ μ΅μλ‘ 40μλ§ λ€μ΄λ©΄ λͺ¨λ λμλ₯Ό μ΄λν μ μμ΅λλ€.
μμ€ μ½λ λ° κ²°κ³Ό
# Python3λ μ μ λ²μκ° λ¬΄μ ν
N = int(input()) # λμμ κ°μ (2 <= N <= 100000)
distances = list(map(int, input().split()))
oilCosts = list(map(int, input().split()))
totalDistance = sum(distances)
minOilCost = min(oilCosts)
#---------------------------------------------------------------------
def Solution(distances, totalDistance, oilCosts, minOilCost):
i = 0
totalOilCost = 0
while i < N - 1: # λ§μ§λ§ λμ μ κΉμ§λ§ 체ν¬νλ©΄ λ¨
currentOilCost = oilCosts[i]
isNextLastCity = (i == N - 2)
moveDistance = 0
if isNextLastCity: # λ§μ§λ§ μ λμκΉμ§ μλ€λ©΄ κ·Έ λμμμ λ¨μ 거리λ§νΌ κΈ°λ¦ μ¬λ©΄ λ
totalOilCost += currentOilCost * totalDistance
return totalOilCost
while oilCosts[i+1] >= currentOilCost: # λ€μ λμ κΈ°λ¦κ°μ΄ νμ¬ λ΄κ° 머무λ₯΄λ λμ κΈ°λ¦κ°λ³΄λ€ λΉμ κ²½μ°
betweenDistance = distances[i] # νμ¬ λμ κΈ°λ¦κ°λ³΄λ€ κ° μΌ λμκ° λμ¬ λκΉμ§ μ΄λν λ§νΌμ κΈ°λ¦μ νμ¬ λμμμ ꡬ맀
moveDistance += betweenDistance
totalOilCost += currentOilCost * betweenDistance
i += 1
if i == N - 2:
break
# κΈ°λ¦κ°μ΄ μΌ λμμ κ·Έ μ΄μ λμ μ¬μ΄μ 거리λ§νΌ κΈ°λ¦ κ΅¬λ§€κ° whileλ¬Έ 쑰건μ μν΄ μλ΅λμΌλ―λ‘ μ§ν
betweenDistance = distances[i]
moveDistance += betweenDistance
totalOilCost += currentOilCost * betweenDistance
totalDistance -= moveDistance
i += 1
if oilCosts[i] == minOilCost: # μ μΌ κ° μΌ μ£Όμ μλ₯Ό μ°Ύμλ€λ©΄ λ¨μ 거리λ§νΌ μ¬κ³ λ
totalOilCost += minOilCost * totalDistance
return totalOilCost
result = Solution(distances, totalDistance, oilCosts, minOilCost)
print(result)
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 11404λ² | νλ‘μ΄λ (Python3) (0) | 2022.09.15 |
---|---|
[BOJ] 10610λ² | 30 (Python3) (0) | 2022.07.20 |
[BOJ] 10162λ² | μ μλ μΈμ§ (Python3) (0) | 2022.07.14 |
[BOJ] 2217λ² | λ‘ν (Python3) (0) | 2022.07.14 |
[BOJ] 5585λ² | κ±°μ€λ¦λ (Python3) (0) | 2022.07.13 |