Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

백준 (python 파이썬) 1149 RGB거리 본문

백준 python 기록

백준 (python 파이썬) 1149 RGB거리

작지 2021. 7. 8. 19:28

백준 링크:https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

1번집의 최솟값을 구하고 계산을 해서 틀려버린 문제였다.

 

오답 코드

tc=int(input())
dp=[]
swich=[True,True,True]
for i in range(tc):
    order=list(map(int,input().split()))
    if False in swich:
        order[swich.index(False)] = 1001
    if len(dp) == 0:
        dp.append(min(order))
        swich[order.index(min(order))] = False
    else:
        swich[swich.index(False)] = True
        dp.append(min(order))
        swich[order.index(min(order))] = False
print(sum(dp))

이렇게 하면 나머지 DP[0][1], DP[0][2]의 경우를 무시해서 오답이 나버린다.

 

 

정답 코드

n=int(input())
dp=[]
for i in range(n):
    dp.append(list(map(int,input().split())))
for i in range(1,len(dp)):
    dp[i][0] = min(dp[i-1][1],dp[i-1][2])+dp[i][0]
    dp[i][1] = min(dp[i-1][0],dp[i-1][2])+dp[i][1]
    dp[i][2] = min(dp[i-1][1],dp[i-1][0])+dp[i][2]
print(min(dp[n-1][0],dp[n-1][1],dp[n-1][2]))

[0]일때는 DP[i-1][1] or [2]+ DP[i][0]를 더해가며 계산하면 된다.

[1] = DP[i][1] + DP[i-1][0] or [2] 

2도 마찬가지다

그리고 계산이 끝난 dp의 리스트중 가장 작은수를 출력하면 끝!

 

나는 멍청해서 한시간 넘게걸림..

Comments