1149번: RGB거리

2023. 3. 14. 13:06· 알고리즘/백준
728x90
 

1149번: RGB거리

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

www.acmicpc.net

 

DP 문제다.

1번부터 N번의 집을 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다.

그리고 인접한 집의 색은 달라야 한다.

 

즉, i번째 집의 색은 i-1번째 집의 색의 영향을 받아서 정해진다.

i-1번째 집이 빨강일 경우 i번째 집은 초록, 파랑만 가능하다.

i-1번째 집이 초록일 경우 i번째 집은 빨강, 파랑만 가능하다.

i-1번째 집이 파랑일 경우 i번째 집은 빨강, 초록만 가능하다.

 

쉬운 문제인 줄 알았는데 생각보다 까다로웠다.

만약 i번째 집에서 빨강을 골랐을 경우, 최솟값은 i-1번째에서 초록, 파랑을 골랐을 경우의 최솟값 + i번째 집을 빨간색으로 칠하는 비용이다.

만약 i번째 집에서 초록을 골랐을 경우, 최솟값은 i-1번째에서 빨강, 파랑을 골랐을 경우의 최솟값 + i번째 집을 초록색으로 칠하는 비용이다.

만약 i번째 집에서 파랑을 골랐을 경우, 최솟값은 i-1번째에서 빨강, 초록을 골랐을 경우의 최솟값 + i번째 집을 파랑색으로 칠하는 비용이다.

 

각 경우를 모두 구해준 다음, 마지막에 n번째 집에서 빨강, 초록, 파랑을 골랐을 경우 각각에서 최솟값을 구해야 답이 나온다.

그래서 dp테이블을 2차원 배열로 구현해서, i번째 집에서 빨강, 초록, 파랑을 골랐을 때의 최솟값을 나눠서 구해야 한다.

 

# 1149번: RGB거리
n = int(input())

dp = [[0 for _ in range(1001)] for _ in range(1001)]
arr = []

for i in range(n):
    r, g, b = map(int, input().split())
    arr.append((r, g, b))


for i in range(n):
    dp[i][0] = min(dp[i-1][1], dp[i-1][2]) + arr[i][0]
    dp[i][1] = min(dp[i-1][0], dp[i-1][2]) + arr[i][1]
    dp[i][2] = min(dp[i-1][0], dp[i-1][1]) + arr[i][2]

print(min(dp[n-1][0], dp[n-1][1], dp[n-1][2]))
728x90

'알고리즘 > 백준' 카테고리의 다른 글

2579번: 계단 오르기  (0) 2023.03.24
1932번: 정수 삼각형  (0) 2023.03.24
1912번: 연속합  (0) 2023.03.14
2580번: 스도쿠  (0) 2023.03.10
9663번: N-Queen  (0) 2023.03.09
'알고리즘/백준' 카테고리의 다른 글
  • 2579번: 계단 오르기
  • 1932번: 정수 삼각형
  • 1912번: 연속합
  • 2580번: 스도쿠
happenundo
happenundo
happenundo
2023~ 개발블로그
happenundo
전체
오늘
어제
  • 분류 전체보기 (207)
    • TIL (3)
    • 알고리즘 (188)
      • 프로그래머스 (47)
      • 백준 (69)
      • 파이썬 문법 (11)
      • 이것이 코딩테스트다 (46)
      • 알고리즘 노트 (6)
      • SQL (8)
    • Spring (4)
      • Spring 입문 (2)
      • 개인 프로젝트 (1)
      • 인텔리제이 (1)
    • CS (8)
      • DB (2)
      • 네트워크 (1)
      • 그외 (5)
    • ~2022 (1)
    • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 이코테
  • 알고리즘
  • 최단거리
  • dfs
  • 큐
  • 구현
  • distinct
  • 괄호변환
  • 이진탐색
  • DP
  • BinarySearch
  • 완전탐색
  • 다이나믹프로그래밍
  • 재귀
  • sql
  • 다익스트라
  • 그리디
  • 우선순위큐
  • 스택
  • CS
  • 정렬
  • 동적프로그래밍
  • deepcopy
  • 프로그래머스
  • BFS
  • 파이썬
  • 백트래킹
  • 플로이드워셜
  • 이것이코딩테스트다

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
happenundo
1149번: RGB거리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.