[백준][Java] 1149번 : rgb 거리

2025. 7. 21. 15:35·PS/백준

[문제 링크]

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

문제 설명

1 ~ N 번의 집을 아래 규칙을 따라서 빨강, 초록, 파랑 중 하나를 골라 색을 칠하는 데 드는 비용의 최솟값을 구한다.
1. 1번 집의 색 != 2번 집의 색
2. N번 집의 색 != N-1번 집의 색
3. i번 집의 색 != i-1번, i번 집의 색 != i-2번 집의 색

 

 

 

 

문제 풀이

다이나믹 프로그래밍으로 풀이

N번째 집의 색이 빨간색이라면,

  • N+1번째 집의 색깔은 초록색 or 파란색
  • N-1번째 집의 색깔은 초록색 or 파란색

dp 테이블은 2차원 배열로, column은 순서대로 빨간색(0), 초록색(1) , 파란색(2)이다.

dp[i][j]는 i번째 집을 j 색으로 칠했을 때, 0~i번 집을 칠하는 데 드는 비용의 최솟값을 의미한다.

 

점화식을 세워보면,

N번째 집이  빨간색일 경우

→ dp[N][0] = dp[N][0] + min(dp[N-1][1], dp[N-1][2])

 

N번째 집이 초록색일 경우

→ dp[N][1] = dp[N][1] + min(dp[N-1][0], dp[N-1][2])

 

N번째 집이 파란색일 경우

→ dp[N][2] = dp[N][2] + min(dp[N-1][0], dp[N-1][1])

 

전체코드

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine());

        int[][] dp = new int[n][3];
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 3; j++) {
                dp[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for (int i = 1; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                if (j == 0) {
                    dp[i][j] = dp[i][j] + Math.min(dp[i - 1][1], dp[i - 1][2]);
                } else if (j == 1) {
                    dp[i][j] = dp[i][j] + Math.min(dp[i - 1][0], dp[i - 1][2]);
                } else if (j == 2) {
                    dp[i][j] = dp[i][j] + Math.min(dp[i - 1][0], dp[i - 1][1]);
                }
            }
        }
        int minCost = Math.min(dp[n - 1][0], Math.min(dp[n - 1][1], dp[n - 1][2]));
        System.out.println(minCost);
    }
}
저작자표시 비영리 변경금지 (새창열림)

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

[백준][Java] 1283번 : 단축키 지정  (2) 2025.08.05
[백준][Java] 1697번 : 숨바꼭질  (2) 2025.07.26
[백준][Java] 13335번 : 트럭  (2) 2025.07.18
[백준][Java] 21921번 : 블로그  (3) 2025.07.12
[백준][Java] 14719번 : 빗물  (4) 2025.07.10
'PS/백준' 카테고리의 다른 글
  • [백준][Java] 1283번 : 단축키 지정
  • [백준][Java] 1697번 : 숨바꼭질
  • [백준][Java] 13335번 : 트럭
  • [백준][Java] 21921번 : 블로그
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (85) N
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (67) N
        • 백준 (24)
        • 프로그래머스 (0)
        • SQL (10) N
        • 이코테 (33)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[백준][Java] 1149번 : rgb 거리
상단으로

티스토리툴바