일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ★
- 동적계획법
- 무료개발강의
- 개발공부
- 백준단계별로풀어보기
- 자바
- ☆
- 알고리즘
- dfs
- 무료코딩강의
- 빅오 표기법
- 백트래킹
- 백준알고리즘
- 자바의정석
- Java개념
- 브루트포스
- 자바의정석연습문제풀이
- 다이나믹 프로그래밍
- BFS
- 자바개념
- 시간 복잡도
- java
- 백준자바
- 알고리즘공부
- 코딩공부
- 자바공부
- 자바의정석연습문제
- 백준9단계
- dp
- 백준
- Today
- Total
더 많이 실패하기
백준 17404번 RGB거리 2 자바 Java (☆공부 284일차) 본문
17404 RGB거리 2
https://www.acmicpc.net/problem/17404
17404번: RGB거리 2
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
백준 17404번 문제 RGB거리 2
문제
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
0.5 초 (추가 시간 없음) | 128 MB | 11025 | 6386 | 5246 | 58.244% |
문제
RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.
집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
- 1번 집의 색은 2번, N번 집의 색과 같지 않아야 한다.
- N번 집의 색은 N-1번, 1번 집의 색과 같지 않아야 한다.
- i(2 ≤ i ≤ N-1)번 집의 색은 i-1, i+1번 집의 색과 같지 않아야 한다.
입력
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
예제 입력 1
3
26 40 83
49 60 57
13 89 99
예제 출력 1
110
예제 입력 2
3
1 100 100
100 1 100
100 100 1
예제 출력 2
3
예제 입력 3
3
1 100 100
100 100 100
1 100 100
예제 출력 3
201
예제 입력 4
6
30 19 5
64 77 64
15 19 97
4 71 57
90 86 84
93 32 91
예제 출력 4
208
예제 입력 5
8
71 39 44
32 83 55
51 37 63
89 29 100
83 58 11
65 13 15
47 25 29
60 66 19
예제 출력 5
253
과정 생각해보기 & 오답
https://gimbalja.tistory.com/280
공부 145일차: 백준 17404번 RGB거리 2 자바 java
17404 RGB거리 2 https://www.acmicpc.net/problem/17404 17404번: RGB거리 2 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한
gimbalja.tistory.com
4달 전에 푼 문제
핵심 방법은
1. 첫번째 집의 색깔을 고르고, 다른 색깔은 최대값으로 설정하여 선택되지 않도록 막는다
2. 기존의 RGB 거리 문제와 같은 코드를 적는다
3. 마지막 집의 색깔이 첫번쨰 집의 색깔과 겹치지 않도록 한다
정답 인정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
public class Main {
public static void main(String[] args) throws Exception{
int n = read();
int[][] house = new int[n][3];
int[][] dp = new int[n][3];
int min = Integer.MAX_VALUE;
for(int i = 0 ; i < n; i++) {
for(int j = 0; j < 3; j++) {
house[i][j] = read();
}
}
for(int first = 0; first < 3; first++) {
for(int i = 0; i < 3; i++) {
if(i != first) {
dp[0][i] = 1_001;
}else {
dp[0][i] = house[0][i];
}
}
for(int i = 1; i < n; i++) {
dp[i][0] = Math.min(dp[i-1][1], dp[i-1][2]) + house[i][0];
dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + house[i][1];
dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + house[i][2];
}
for(int i = 0; i < 3; i++) {
if(i != first) {
min = Math.min(min, dp[n-1][i]);
}
}
}
System.out.println(min);
}
static int read() throws Exception{
int c, n = System.in.read() & 15;
while((c = System.in.read()) > 32) {
n = (n << 3) + (n << 1) + (c & 15);
}
return n;
}
}
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
백준 3085번 사탕 게임 자바 Java (☆공부 286, 287일차) (0) | 2023.05.12 |
---|---|
백준 2309번 일곱 난쟁이 자바 Java (☆공부 285일차) (0) | 2023.05.11 |
백준 13398번 연속합 2 자바 Java (☆공부 283일차) (0) | 2023.05.09 |
백준 11054번 가장 긴 바이토닉 부분 수열 자바 Java (☆공부 282일차) (1) | 2023.05.08 |
백준 11722번 가장 긴 감소하는 부분 수열 자바 Java (☆공부 281일차) (0) | 2023.05.07 |