1149번: RGB거리 (acmicpc.net)
##
# dp
n_house_cost 배열에 1번 줄부터 N번 줄까지 R,G,B의 비용이 오게 하고, bottom-up방식으로 cost의 배열을 채우기
cost배열에서
N번째까지 집의 R의 비용 = min(N-1번까지 마지막이 G인 비용, N-1번까지 마지막이 B인 비용) + N번째의 R의 비용
이 과정대로 표를 채워나가고, 정답은 채워나간 배열에서 N번째 행의 최소값
##
import sys
input = sys.stdin.readlines
l = list(map(lambda x:x.rstrip().replace('\x1a',''),input()))
N = int(l[0])
n_house_cost = [[0,0,0]] + list(map(lambda x: list(map(int, x.split())),l[1:]))
cost = [[0,0,0]]
i = 0
while(True):
i += 1
if i == N+1: break
R = min(cost[i-1][1],cost[i-1][2]) + n_house_cost[i][0]
G = min(cost[i-1][0],cost[i-1][2]) + n_house_cost[i][1]
B = min(cost[i-1][0],cost[i-1][1]) + n_house_cost[i][2]
cost.append([R,G,B])
print(min(cost[N]))
lambda를 이용해서 주어진 문자 리스트를 숫자 리스트로 바꾸는 방식, 문제풀다가 몇번 이 상황이 나왔었는데 람다로 한줄로 줄일수 있을것 같아서 처음 해봤다.
그런데 왜 for문이 아닌 while문을 쓰면서 풀었을까.
뭔가 반복문이 복잡하게 될거라고 생각했던것 같다.
0 댓글