๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๋ฌธ์ ์ค๋ช
์ด๋ค ๋๋ผ์ 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)
'๐คAlgorithm > 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 |