편집 시간: 2022년 2월 16일 오후 4:10

코드

Algorithm/1149.py at main · Junroot/Algorithm

풀이

모든 경우의 수를 다 구해보는 방법 밖에 없다. 함수 f(index, last_color)를 만들어 함수를 아래와 같이 정의한다.

  • f(index, last_color): index번째 집이 last_color를 사용하지 못할 때 최소 index부터 n번째 집까지 칠하는데 최소 비용

그러면 아래와 같은 점화식이 만들어진다.

f(index, last_color) = min( (index번째 집의 color1 비용) + f(index + 1, color1), (index번째 집의 color2 비용) + f(index + 1, color2) )

color1과 color2는 last_color가 아닌 나머지 색깔들이다. 이 때 중복된 연산을 피하기 위해서 DP를 함께 사용하면 시간초과를 피할 수 있다.