Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

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

Algorithm

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

동그라미_ssu 2023. 2. 10. 16:21

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

하... 진짜 너무 어렵게 생각을 했다.

모든 알고리즘 문제가 그렇겠지만 어떻게 푸는지 이해는 갔지만 코드로 표현한다는게 진짜 실력인거 같다.

이 문제에서 팍 느꼈다.

문제를 풀때에는 고정관념에서 벗어나야한다. 어떠한 문제를 보고 이런 문제는 이렇게 풀면되지라는 공식처럼 외우고 있다간 조금만 변형된 문제 맞닥뜨리면 그 문제를 풀 수 없게된다. 심지어 그 문제가 더 쉬운 문제라 한들 말이다.

고정관념에서 벗어나자 

n = int(input())
house = []

for _ in range(n):
    house.append(list(map(int,input().split())))

for i in range(1,n):
    # 0번째 위치일경우 위의 리스트에서 첫번째 두번째 값중 낮은 값을 선택해 더해서 저장해준다
    house[i][0] = min(house[i-1][1],house[i-1][2])+house[i][0]
    
    # 1번째 위치일경우 위의 리스트에서 0번째 두번째 값중 낮은 값을 선택해 더해서 저장해준다
    house[i][1] = min(house[i-1][0],house[i-1][2])+house[i][1]
    
    # 2번째 위치일경우 위의 리스트에서 0번째 첫번째 값중 낮은 값을 선택해 더해서 저장해준다
    house[i][2] = min(house[i-1][0],house[i-1][1])+house[i][2]

print(min(house[n-1])) # 마지막 행에서 제일 낮은 값을 출력해준다.