본문 바로가기
알고리즘/BOJ

[BOJ] 1149번 RGB거리 / 사용언어 : 파이썬(python)

by 바른 호랑이 2021. 12. 23.
728x90
반응형

※ 문제링크

 

1149번: RGB거리

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

www.acmicpc.net

※ 관련개념

 

메모이제이션 - 위키백과, 우리 모두의 백과사전

메모이제이션(memoization)은 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하

ko.wikipedia.org

해당 문제는 메모이제이션과 배열을 이용하여 푸는 문제였다. 입력값을 저장할 배열을 생성한 뒤 2차원 리스트로 배열을 만들고 반복문을 작성하여 최솟값을 계산하여 배열의 값을 바꾸는 방식으로 해결하였으며, 자세한 풀이와 코드는 아래와 같다.

1. 입력값을 받을 배열을 만들고, 입력값을 받아 2차원 리스트를 생성한다.

2. 2번째 행(리스트의 2번째)부터 반복문을 돌려 특정한 색의 집을 선택했을 때의 비용을 구하고 배열의 값을 변환한다.

3. 반복문을 끝까지 돌리고, 마지막 행의 최솟값을 출력한다.

 

N = int(input())
cost_list = [list(map(int, input().split())) for _ in range(N)]
for i in range(1, N):
    cost_list[i][0] = min([cost_list[i-1][1], cost_list[i-1][2]]) + cost_list[i][0]
    cost_list[i][1] = min([cost_list[i-1][0], cost_list[i-1][2]]) + cost_list[i][1]
    cost_list[i][2] = min([cost_list[i-1][1], cost_list[i-1][0]]) + cost_list[i][2]
print(min(cost_list[N-1]))

 

P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글