백준 1149 RGB 거리 JAVA 풀이 (DP, 누적 최소값, 시간복잡도)

2026. 4. 24. 00:31·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

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


📌 문제 개요

백준 1149번 RGB 거리는 각 집을 빨강, 초록, 파랑 중 하나로 칠할 때
인접한 집은 같은 색을 사용할 수 없다는 조건에서 전체 비용의 최솟값을 구하는 문제입니다.

 


📌 접근 방법

이 문제는 대표적인 DP 기초 문제입니다.

각 집마다 3가지 선택지가 있으므로 이전 상태를 기반으로 누적해 나가면 됩니다.

 

DP 정의 : dp[i][color] = i 번째 집까지 고려했을 때 최소 비용

 


📌 핵심 아이디어

현재 집을 특정 색으로 칠하려면
이전 집은 다른 색이어야 합니다.


📌 점화식

dp[i][0] = Math.min(dp[i-1][1], dp[i-1][2]) + cost[i][0];
dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + cost[i][1];
dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + cost[i][2];
 

즉, "현재 색 ≠ 이전 색" 조건만 지키면 된다


📌 처리 흐름

입력
→ cost 배열 저장
→ dp[0] 초기화
→ i = 1 ~ N-1 반복
→ 각 색마다 이전 두 색 중 최소 선택
→ 마지막 집에서 최소값 출력
 

📌 전체 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[][] cost = new int[N][3];
        int[][] dp = new int[N][3];

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            cost[i][0] = Integer.parseInt(st.nextToken());
            cost[i][1] = Integer.parseInt(st.nextToken());
            cost[i][2] = Integer.parseInt(st.nextToken());
        }

        // 초기값
        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] = Math.min(dp[i-1][1], dp[i-1][2]) + cost[i][0];
            dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + cost[i][1];
            dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + cost[i][2];
        }

        int result = Math.min(dp[N-1][0],
                      Math.min(dp[N-1][1], dp[N-1][2]));

        System.out.println(result);
    }
}

 


📄 정리

이 문제는 DP의 기본 패턴을 익히기에 매우 좋은 문제입니다.

  • 상태 정의
  • 이전 상태 활용
  • 조건(같은 색 금지) 반영
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

백준 4008 특공대 JAVA 풀이 (DP, CHT, 누적합, 시간복잡도)  (0) 2026.04.24
백준 11444 피보나치 수 6 JAVA 풀이 (행렬 거듭제곱, 분할정복, 시간복잡도)  (0) 2026.04.24
[백준] 트리 순회 JAVA 풀이 (트리, 재귀, DFS)  (0) 2026.04.21
백준 13548 수열과 쿼리 6 JAVA 풀이 (Mo's Algorithm, 오프라인 쿼리)  (0) 2026.04.20
백준 1531 투명 JAVA 풀이 (브루트포스, 시뮬레이션)  (0) 2026.04.19
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 백준 4008 특공대 JAVA 풀이 (DP, CHT, 누적합, 시간복잡도)
  • 백준 11444 피보나치 수 6 JAVA 풀이 (행렬 거듭제곱, 분할정복, 시간복잡도)
  • [백준] 트리 순회 JAVA 풀이 (트리, 재귀, DFS)
  • 백준 13548 수열과 쿼리 6 JAVA 풀이 (Mo's Algorithm, 오프라인 쿼리)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    완전탐색
    기출문제
    코딩테스트
    정렬
    문자열
    실기
    피보나치
    백준
    정처기
    백엔드개발자
    자바
    알고리즘
    level1
    level0
    Level2
    구현
    자료구조
    수학
    정보처리기사
    springboot
    정처기실기
    브루트포스
    시뮬레이션
    정보처리기사 실기 기출문제
    배열
    java
    solved.ac
    정처기오답노트
    dp
    프로그래머스
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
백준 1149 RGB 거리 JAVA 풀이 (DP, 누적 최소값, 시간복잡도)
상단으로

티스토리툴바