Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- baekjoon
- winapi
- 오블완
- algorithm
- C++
- Programmers
- RootMotion
- 프로그래머스
- DeferredRendering
- 백준
- Frustum
- RVO
- C
- IFileDialog
- const
- 2294
- directx
- 1563
- DirectX11
- GeeksForGeeks
- UE5
- softeer
- 줄 세우기
- 팰린드롬 만들기
- UnrealEngine4
- NRVO
- Unreal Engine5
- 티스토리챌린지
- UnrealEngine5
- 언리얼엔진5
Archives
- Today
- Total
Game Develop
[Algorithm]Baekjoon 17404번 :: RGB거리 2 본문
https://www.acmicpc.net/problem/17404
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
|
int arr[1001][3];
int n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; ++i)
{
int a, b, c;
cin >> arr[i][0] >> arr[i][1] >> arr[i][2];
}
int answer = 0x3f3f3f3f;
for (int i = 0; i <= 2; ++i) // 처음 색깔 선택.
{
int dp[1000][3];
for (int j = 0; j <= 2; ++j)
{
if (j == i) dp[0][j] = arr[0][j];
else dp[0][j] = 0x3f3f3f3f;
}
for (int j = 1; j < n; ++j)
{
dp[j][0] = min(dp[j - 1][1] + arr[j][0], dp[j - 1][2] + arr[j][0]);
dp[j][1] = min(dp[j - 1][0] + arr[j][1], dp[j - 1][2] + arr[j][1]);
dp[j][2] = min(dp[j - 1][0] + arr[j][2], dp[j - 1][1] + arr[j][2]);
}
for (int j = 0; j <= 2; ++j)
{
if (j == i) continue;
answer = min(answer, dp[n - 1][j]);
}
}
cout << answer;
}
|
cs |
n-1과 n+1을 전부 고려해야 하는 문제이다.
특히나 유의해야할 점은, 1번째 집의 경우 2번째집만 고려해야하는게 아니라 n번째 집도 고려해야 한다.
마찬가지로 n번째 집은 n-1번째 집만 고려해야할게 아니라 1번째 집도 고려해야한다.
즉, 집의 형태가 원형으로 이루어졌다고 보면 될것같다.
해결할 방법으로는 그냥 첫번째집을 하나의 색으로 고정시키고 DP테이블을 업데이트하는것이다.
RGB, 즉 3번만 고정시키면 되기때문에 3N->시간복잡도(N)으로 해결할 수 있다.
예를들어 아예 처음집 색을 빨간색으로 칠했다 가정하면, N번째까지 DP테이블을 업데이트한다음에 N번째의 빨간색을 제외한 초록,파랑값중 작은값을 정답에 저장하면 된다.
똑같이 처음집 색을 초록,파랑으로 해서 N번째까지 DP테이블 업데이트 후, 처음색깔을 제외한 DP테이블의 값을 정답에 최솟값으로 갱신시키면 된다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm]Baekjoon 15990번 :: 1,2,3 더하기 5 (1) | 2023.12.05 |
---|---|
[Algorithm]Baekjoon 1563번 :: 개근상 (1) | 2023.12.04 |
[Algorithm]Baekjoon 16194번 :: 카드 구매하기 2 (1) | 2023.11.27 |
[Algorithm]Baekjoon 14719번 : 빗물 (1) | 2023.11.27 |
[Algorithm]Baekjoon 2812번 : 크게 만들기 (1) | 2023.11.24 |