백준 1149번: RGB 거리

2021. 7. 9. 15:58·IT/BOJ 문제정리

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

 

1149번: RGB거리

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

www.acmicpc.net

 

 

0. 알고리즘 분류

 다이나믹 프로그래밍

 

 

1. 문제

 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.

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

 

 

2. 풀이

 분명 알고리즘 분류는 DP인데, 어떻게 써먹어야 풀리는지 생각해내지 못했다.. 그래서 일단 구글링으로 솔루션을 봤다. 생각보다 간단하다. RGB에 대해 dp배열을 3개 만들어서, 각 RGB마다 1번 집부터 i번 집까지의 최솟값을 저장시킨다. 마지막 N번째 집에서는 dp값 3개 중에서 최솟값을 출력하기만 하면 된다. DP도 생각보다 어려우면서 다양한 문제에 적용시킬 수 있다는 걸 깨달았다.

 

 

3. 코드

#include <iostream>

using namespace std;

int min(int x, int y) {
	return (x < y) ? x : y;
}

int main(void) {
	int n;
	cin >> n;
	int cost[n][3];
	int dp[n][3];
	for (int i = 0; i < n; i++) {
		cin >> cost[i][0] >> cost[i][1] >> cost[i][2];
	}
	
	dp[0][0] = cost[0][0]; dp[0][1] = cost[0][1]; dp[0][2] = cost[0][2];
	
	for (int i = 1; i < n; i++) {
		dp[i][0] = cost[i][0] + min(dp[i-1][1], dp[i-1][2]);
		dp[i][1] = cost[i][1] + min(dp[i-1][0], dp[i-1][2]);
		dp[i][2] = cost[i][2] + min(dp[i-1][0], dp[i-1][1]);
	}
	
	int ans = min(min(dp[n-1][0], dp[n-1][1]), dp[n-1][2]);
	cout << ans;
	
	return 0;
}

'IT > BOJ 문제정리' 카테고리의 다른 글

백준 10026번: 적록색약  (0) 2021.07.13
백준 1932번: 정수 삼각형  (0) 2021.07.10
백준 1034번: 램프  (0) 2021.07.08
백준 9663번: N-Queen  (0) 2021.07.08
백준 2230번: 수 고르기  (0) 2021.07.08
'IT/BOJ 문제정리' 카테고리의 다른 글
  • 백준 10026번: 적록색약
  • 백준 1932번: 정수 삼각형
  • 백준 1034번: 램프
  • 백준 9663번: N-Queen
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (576)
      • 혼잣말 (88)
      • TIL (3)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (169)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (40)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록체인
    Pint OS
    자바스크립트
    numpy
    나만무
    센디
    pintos
    머신러닝
    졸업과제
    OS
    딥러닝
    글리치해커톤
    RNN
    사이드프로젝트
    NEAR Protocol
    파이썬
    docker
    JavaScript
    코드프레소
    Flutter
    핀토스
    부산대
    니어프로토콜
    MailBadara
    해커톤
    리액트
    알고리즘
    프로그래머스
    react
    크래프톤정글
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
백준 1149번: RGB 거리
상단으로

티스토리툴바