728x90
반응형
"""
1번집: rgb중 가장 싼거
2번집: (1번집에서 안한색 中 가장싼거 + 1번집가격) or (2번집 중 가장싼거 + 2번집에서 안한 색 중 1번집 가장싼거) 둘 중 더 싼거
"""
n=int(input()) #집의 수
r=[]#빨간집을 칠하는 비용들
g=[]#초록집을 칠하는 비용들
b=[]#파란집을 칠하는 비용들
for i in range(n):
R,G,B=map(int,input().split())
r.append((R,0))
g.append((G,1))
b.append((B,2))
#각 행의 1번 인덱스는 색을 표현함
data=[[0]*2 for i in range(n)]
def C_rgb(i):
if r[i][0] < g[i][0]:
if r[i][0]<b[i][0]:
return r[i]
else:
return b[i]
else:
if g[i][0]<b[i][0]:
return g[i]
else:
return b[i]
data[0][0],data[0][1]=C_rgb(0) #0번째 집은 가장 싼 집으로
for i in range(1,n):
if data[i-1][1] == 0: #이전 집이 빨강인 경우
if g[i][0]<b[i][0]: #초록과 파랑 비교
data[i][0],data[i][1]=g[i]
else:
data[i][0],data[i][1]=b[i]
elif data[i-1][1] ==1: #이전 집이 초록인 경우
if r[i][0]<b[i][0]: #빨강과 파랑 비교
data[i][0],data[i][1]=r[i]
else:
data[i][0],data[i][1]=b[i]
elif data[i-1][1] ==2: #이전 집이 파랑인 경우
if r[i][0]<g[i][0]: #빨강과 초록 비교
data[i][0],data[i][1]=r[i]
else:
data[i][0],data[i][1]=g[i]
#이렇게해서 1번째 가장싼집+2번째(1번째집색제외) 가장싼집으로 설정
#2번째케이스. 2번째 집 중 가장싼집 + (2번째에서 정한 색 제외)1번째집 가장싼집
temp=C_rgb(i)
if temp[1] == 0: #2 집이 빨강인 경우
if g[i-1][0]<b[i-1][0]: #초록과 파랑 비교
if data[i-1][0]+data[i][0] > g[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = g[i-1][0],g[i-1][1]
else:
if data[i-1][0]+data[i][0] > b[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = b[i-1][0],b[i-1][1]
elif temp[1] ==1: #2 집이 초록인 경우
if r[i-1][0]<b[i-1][0]: #빨강과 파랑 비교
if data[i-1][0]+data[i][0] > r[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = r[i-1][0],r[i-1][1]
else:
if data[i-1][0]+data[i][0] > b[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = b[i-1][0],b[i-1][1]
elif temp[1] ==2: #2 집이 파랑인 경우
if r[i-1][0]<g[i-1][0]: #빨강과 초록 비교
if data[i-1][0]+data[i][0] > r[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = r[i-1][0],r[i-1][1]
else:
if data[i-1][0]+data[i][0] > g[i-1][0] + temp[0]:
data[i][0],data[i][1] = temp
data[i-1][0],data[i-1][1] = g[i-1][0],g[i-1][1]
print(data)
sum=0
for i in range(n):
sum+=data[i][0]
print(sum)
능지 처참
개처참
심지어 실패함
n = int(input())
rgb = []
for i in range(n):
rgb.append(list(map(int, input().split())))
#각 행의 0번인덱스-빨강 1번인덱스-초록 2번인덱스-파랑
for i in range(1, len(rgb)):
rgb[i][0] = min(rgb[i - 1][1], rgb[i - 1][2]) + rgb[i][0] #i번째 집을 빨강으로 칠하는경우
rgb[i][1] = min(rgb[i - 1][0], rgb[i - 1][2]) + rgb[i][1] #i번째 집을 초록으로 칠하는 경우
rgb[i][2] = min(rgb[i - 1][0], rgb[i - 1][1]) + rgb[i][2] #i번째 집을 파랑으로 칠하는 경우
print(min(rgb[n - 1][0], rgb[n - 1][1], rgb[n - 1][2]))
이렇게 풀면됨
728x90
반응형
'코딩 > 백준-파이썬' 카테고리의 다른 글
백준 13549번: 숨바꼭질 3 (0) | 2022.07.27 |
---|---|
백준 2589번: 보물섬 (0) | 2022.07.26 |
백준 16234번: 인구 이동 (0) | 2022.07.26 |
백준 1654번: 랜선 자르기 (0) | 2022.07.25 |
백준 16236번: 아기상어 (0) | 2022.07.25 |
댓글