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문을 쓰면서 풀었을까.
뭔가 반복문이 복잡하게 될거라고 생각했던것 같다.