ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

1149번: RGB거리

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

www.acmicpc.net

 

문제 풀이

 λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ 잘 ν™œμš©ν•˜λ©΄, 어렡지 μ•Šκ²Œ ν’€ 수 μžˆλ‹€. λ˜ν•œ 각 N행은 ν•˜λ‚˜μ˜ 집을 λ‚˜νƒ€λ‚΄κ³  1, 2, 3열은 R, G, B둜 μΉ  ν•  경우 λ°œμƒν•˜λŠ” λΉ„μš©μ„ μ˜λ―Έν•œλ‹€.

 

 κΈ°λ³Έ μ˜ˆμ œλŠ” κ·Έλ¦Όκ³Ό 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. 집 1(0번 인덱슀)은 첫 번째 집이기에 값을 λˆ„μ μ‹œν‚¬ ν•„μš”κ°€ μ—†λ‹€. λ”°λΌμ„œ 집 2(1번 인덱슀)λΆ€ν„°λŠ” ν•΄λ‹Ή 색상을 μ„ νƒν•˜μ˜€μ„ λ•Œ, μ΄μ „μ˜ μ§‘μ—μ„œ 선택할 수 μžˆλŠ” μƒ‰μƒμ˜ κ°’ 쀑 μ΅œμ†Ÿκ°’μ„ λ”ν•œλ‹€. 이λ₯Ό 톡해 집 2에 ν•©μ‚°ν•œ 값은 값은 89, 86, 83κ°€ λœλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ 집 3의 κ²½μš°λ„ 이 과정을 거치면 96, 172, 185λΌλŠ” 값을 얻을 수 μžˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή μ˜ˆμ‹œμ—μ„œλŠ” 집 1, 2, 3은 각각 λΉ¨κ°•, νŒŒλž‘, λΉ¨κ°•μœΌλ‘œ μ„ νƒν•˜μ˜€μ„ λ•Œ μ΅œμ†Ÿκ°’μœΌλ‘œ μΉ ν•  μˆ˜μžˆλ‹€.

 

μ½”λ“œ

from sys import stdin

if __name__ == '__main__':
    R, G, B = 0, 1, 2
    n = int(stdin.readline())

    prices = \
        [list(map(int, stdin.readline().split())) for _ in range(n)]

    for i in range(1, n):
        prices[i][R] += min(prices[i - 1][G], prices[i - 1][B])
        prices[i][G] += min(prices[i - 1][R], prices[i - 1][B])
        prices[i][B] += min(prices[i - 1][R], prices[i - 1][G])

    print(min(prices[-1]))
728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€