😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Softeer] python 쑰립라인 본문

πŸ¦₯ μ½”ν…Œ/Softeer

[Softeer] python 쑰립라인

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 1. 7. 12:44
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” Softeer의 μ½”λ”©ν…ŒμŠ€νŠΈ 문제λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€>

https://softeer.ai/practice/info.do?idx=1&eid=403 

 

Softeer

μ—°μŠ΅λ¬Έμ œλ₯Ό 담을 Set을 μ„ νƒν•΄μ£Όμ„Έμš”. μ·¨μ†Œ 확인

softeer.ai

 

⭐ 문제

언어별 μ‹œκ°„/λ©”λͺ¨λ¦¬
Python 2초 256MB

문제
λ™μΌν•œ μžλ™μ°¨λ₯Ό μƒμ‚°ν•˜λŠ” 2개의 μ‘°λ¦½ λΌμΈ A와 Bκ°€ μžˆλ‹€. λ‘ μ‘°λ¦½λΌμΈμ—λŠ” κ°κ° N개의 μž‘μ—…μž₯이 μžˆλ‹€. κ°κ°μ˜ μž‘μ—…μž₯을 Ai (1 ≤ i ≤ N)와 Bi (1 ≤ i ≤ N)둜 ν‘œμ‹œν•˜μž. Ai μž‘μ—…μž₯κ³Ό Bi μž‘μ—…μž₯은 λ™μΌν•œ μž‘업을 μˆ˜ν–‰ν•˜μ§€λ§Œ μž‘μ—…μ‹œκ°„μ€ λ‹€λ₯Ό μˆ˜ μžˆλ‹€. A μ‘°λ¦½ λΌμΈμ˜ κ²½μš° A1 μž‘μ—…μž₯μ—μ„œ μ΅œμ΄ˆ μ‘°λ¦½μ΄ μ‹œμž‘λ˜κ³ , Ai μž‘μ—…μž₯μ—μ„œ μž‘업이 μ’…λ£Œλ˜λ©΄ λ°”λ‘œ Ai+1 μž‘μ—…μž₯μ—μ„œ μž‘μ—…μ„ μ‹œμž‘ν•  수 μžˆλ‹€. 

B μ‘°λ¦½ λΌμΈλ„ λ™μΌν•œ λ°©μ‹μœΌλ‘œ μ‘°λ¦½μ„ μ§„ν–‰ν•œλ‹€. Ai μž‘μ—…μž₯μ—μ„œ Bi+1μž‘μ—…μž₯으둜 ν˜Ήμ€ Bi μž‘μ—…μž₯μ—μ„œ Ai+1μž‘μ—…μž₯으둜 λ°˜μ‘°λ¦½ μ œν’ˆμ˜ μ΄λ™μ΄ κ°€λŠ₯(μ΄λ™μ‹œκ°„μ΄ μΆ”가됨)ν•  λ•Œ μžλ™μ°¨ 1λŒ€μ˜ κ°€μž₯ λΉ λ₯Έ μ‘°λ¦½ μ‹œκ°„을 κ΅¬ν•˜μ—¬λΌ.


μ œμ•½μ‘°κ±΄
1 ≤ N ≤ 10^3 μΈ μ •μˆ˜
각 μž‘μ—…μ‹œκ°„κ³Ό μ΄λ™μ‹œκ°„μ€ 10^5을 λ„˜μ§€ μ•ŠλŠ” μ–‘μ˜ μ •μˆ˜

μž…λ ₯ν˜•μ‹
첫 λ²ˆμ§Έ μ€„에 μž‘μ—…μž₯의 μˆ˜ N이 μ£Όμ–΄μ§„λ‹€. i+1 (1 ≤ i ≤ N-1) λ²ˆμ§Έ μ€„μ—λŠ” Ai μž‘μ—…μž₯의 μž‘μ—…μ‹œκ°„, Bi μž‘μ—…μž₯의 μž‘μ—…μ‹œκ°„, Ai μž‘μ—…μž₯μ—μ„œ Bi+1 μž‘μ—…μž₯κΉŒμ§€ μ΄λ™μ‹œκ°„, Bi μž‘μ—…μž₯μ—μ„œ Ai+1 μž‘μ—…μž₯κΉŒμ§€ μ΄λ™μ‹œκ°„이 μ°¨λ‘€λ‘œ μ£Όμ–΄μ§„λ‹€.
λ§ˆμ§€λ§‰ N+1번째 μ€„μ—λŠ” A
N μž‘μ—…μž₯κ³Ό BN μž‘μ—…μž₯의 μž‘μ—…μ‹œκ°„μ΄ μ£Όμ–΄μ§„λ‹€. 


좜λ ₯ν˜•μ‹
첫 λ²ˆμ§Έ μ€„에 κ°€μž₯ λΉ λ₯Έ μ‘°λ¦½μ‹œκ°„을 μΆœλ ₯ν•˜λΌ.


μž…λ ₯예제1
2
1 3 1 2
10 2

좜λ ₯예제1
4

 

βœ… Code

# λ™μΌν•œ μžλ™μ°¨λ₯Ό μƒμ‚°ν•˜λŠ” 2개의 쑰립 라인 A와 B
# 두 μ‘°λ¦½λΌμΈμ—λŠ” 각각 N개의 μž‘μ—…μž₯
# 각각의 μž‘μ—…μž₯을 Ai (1 ≤ i ≤ N)와 Bi (1 ≤ i ≤ N)

# Ai μž‘μ—…μž₯μ—μ„œ Bi+1μž‘μ—…μž₯으둜 ν˜Ήμ€ Bi μž‘μ—…μž₯μ—μ„œ Ai+1μž‘μ—…μž₯으둜 
# 반쑰립 μ œν’ˆμ˜ 이동이 κ°€λŠ₯(μ΄λ™μ‹œκ°„μ΄ 좔가됨)ν•  λ•Œ 
# μžλ™μ°¨ 1λŒ€μ˜ κ°€μž₯ λΉ λ₯Έ 쑰립 μ‹œκ°„

import sys

N = int(input())

# μž‘μ—…μ‹œκ°„, μ΄λ™μ‹œκ°„
# μž‘μ—…μ‹œκ°„
line = [list(map(int, input().split())) for _ in range(N)]

# Dynamic Programming
dp = [[0, 0]] * N
dp[0] = [line[0][0], line[0][1]]

for i in range(1, N) :
    # A 쑰립라인, B 쑰립라인
    dp[i] = [min(dp[i-1][0], dp[i-1][1] + line[i-1][3]) + line[i][0],
    min(dp[i-1][1], dp[i-1][0] + line[i-1][2]) + line[i][1]]

print(min(dp[N-1]))
728x90
λ°˜μ‘ν˜•
Comments