관리 메뉴

πŸ’»πŸ’­πŸŽ§πŸŒ

BOJ 1149 : RGB 거리 (Python) 본문

μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€ 풀이

BOJ 1149 : RGB 거리 (Python)

adorableco 2023. 1. 30. 14:05
λ°˜μ‘ν˜•

문제

RGBκ±°λ¦¬μ—λŠ” 집이 N개 μžˆλ‹€. κ±°λ¦¬λŠ” μ„ λΆ„μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 있고, 1번 μ§‘λΆ€ν„° N번 집이 μˆœμ„œλŒ€λ‘œ μžˆλ‹€.

집은 λΉ¨κ°•, 초둝, νŒŒλž‘ 쀑 ν•˜λ‚˜μ˜ μƒ‰μœΌλ‘œ μΉ ν•΄μ•Ό ν•œλ‹€. 각각의 집을 λΉ¨κ°•, 초둝, νŒŒλž‘μœΌλ‘œ μΉ ν•˜λŠ” λΉ„μš©μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ•„λž˜ κ·œμΉ™μ„ λ§Œμ‘±ν•˜λ©΄μ„œ λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•΄λ³΄μž.

  • 1번 μ§‘μ˜ 색은 2번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • N번 μ§‘μ˜ 색은 N-1번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • i(2 ≤ i ≤ N-1)번 μ§‘μ˜ 색은 i-1번, i+1번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ§‘μ˜ 수 N(2 ≤ N ≤ 1,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” 각 집을 λΉ¨κ°•, 초둝, νŒŒλž‘μœΌλ‘œ μΉ ν•˜λŠ” λΉ„μš©μ΄ 1번 μ§‘λΆ€ν„° ν•œ 쀄에 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. 집을 μΉ ν•˜λŠ” λΉ„μš©μ€ 1,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

 

좜λ ₯

첫째 쀄에 λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

 

 

 

 

풀이

ai λŠ” i 번째 인덱슀 일 λ•Œ λͺ¨λ“  집을 μΉ ν•˜λŠ” μ΅œμ†Œ λΉ„μš©μ„ λ‚˜νƒ€λ‚Έλ‹€. ai의 색이 빨강인 경우, νŒŒλž‘μΈ 경우, 초둝인 경우λ₯Ό λ‚˜λˆ μ„œ κ³„μ‚°ν•œλ‹€.

 

ex) ai 의 색이 빨강인 경우, color1은 a(i-1)의 νŒŒλž‘μƒ‰μ„ μΉ ν•˜λŠ” λΉ„μš©μ΄κ³  color2λŠ” a(i-1)의 μ΄ˆλ‘μƒ‰μ„ μΉ ν•˜λŠ” λΉ„μš©μ΄ λœλ‹€.

 

for 문의 싀행이 λλ‚œ 뒀에 dp[n-1][0], dp[n-1][1], dp[n-1][2] μ€‘μ—μ„œ κ°€μž₯ 값이 μž‘μ€ 것이 문제의 닡이 λœλ‹€.

 

μ½”λ“œ

n = int(input())

array = [list(map(int, input().split())) for _ in range(n)]

dp = [[0 for j in range(3)] for i in range(n)]

for i in range(3):
    dp[0][i] = array[0][i]

for i in range(1,n):
    for j in range(3):
        if j == 0:
            dp[i][j] = min(dp[i-1][1],dp[i-1][2]) + array[i][j]
        elif j == 1:
            dp[i][j] = min(dp[i-1][0],dp[i-1][2]) + array[i][j]
        else:
            dp[i][j] = min(dp[i-1][0],dp[i-1][1]) + array[i][j]

print(min(dp[n-1][0],dp[n-1][1],dp[n-1][2]))

 

λ°˜μ‘ν˜•