[boj] (s1) 1149 RGB 거리

강신현·2022년 4월 21일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

  1. 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
  2. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
  3. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.

조건이 3가지나 되지만 잘 생각해보면 결국 양쪽으로 인접한 집들은 같은 색으로 칠 할 수 없다는 말이다.

따라서 n번째 집이 칠해질 수 있는 색깔은 이전 n-1번째 집이 무슨 색이었느냐에 따라 결정된다.

  • 칠하는 비용은 최소가 되어야 하므로 이전 집의 경우중에 칠하는 비용이 더 적은 색상을 선택한다.
  • 각 집에 칠할 수 있는 있는 색상은 RGB 3가지이므로 각각의 경우를 따로 세어줘야 한다.
  • 정의
    f(i,c)f(i,c) : ii 집까지 칠하는 비용의 최솟값, ii 집의 색상은 c(R/G/B)c(R/G/B)
  • 구하는 답
    min(f(N,R),f(N,G),f(N,B))min(f(N,R),f(N,G),f(N,B))
  • 초기값
    f(1,R)=price(G)f(1,R)=price(G)
    f(1,G)=price(G)f(1,G)=price(G)
    f(1,B)=price(G)f(1,B)=price(G)
  • 점화식
    f(i,R)=min(f(i1,G),f(i1,B))+price(R)f(i,R)=min(f(i-1,G),f(i-1,B))+price(R)
    f(i,G)=min(f(i1,R),f(i1,B))+price(G)f(i,G)=min(f(i-1,R),f(i-1,B))+price(G)
    f(i,B)=min(f(i1,R),f(i1,G))+price(B)f(i,B)=min(f(i-1,R),f(i-1,G))+price(B)

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보