λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”₯ PS(Problem Solving) πŸ”₯/BOJ

[BOJ] #1149 RGB 거리

by dar0m! 2019. 10. 2.
μ‹œκ°„ μ œν•œ λ©”λͺ¨λ¦¬ μ œν•œ μ •λ‹΅ λΉ„μœ¨
0.5 초 128 MB 46.756%

 

 

1149번: RGB거리

RGB거리에 μ‚¬λŠ” μ‚¬λžŒλ“€μ€ 집을 λΉ¨κ°•, 초둝, νŒŒλž‘μ€‘μ— ν•˜λ‚˜λ‘œ μΉ ν•˜λ €κ³  ν•œλ‹€. λ˜ν•œ, 그듀은 λͺ¨λ“  이웃은 같은 μƒ‰μœΌλ‘œ μΉ ν•  수 μ—†λ‹€λŠ” κ·œμΉ™λ„ μ •ν–ˆλ‹€. 집 i의 이웃은 집 i-1κ³Ό 집 i+1이고, 첫 집과 λ§ˆμ§€λ§‰ 집은 이웃이 μ•„λ‹ˆλ‹€. 각 집을 λΉ¨κ°•μœΌλ‘œ μΉ ν•  λ•Œ λ“œλŠ” λΉ„μš©, 초둝으둜 μΉ ν•  λ•Œ λ“œλŠ” λΉ„μš©, νŒŒλž‘μœΌλ‘œ λ“œλŠ” λΉ„μš©μ΄ μ£Όμ–΄μ§ˆ λ•Œ, λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

www.acmicpc.net

문제

N개의 행에 λŒ€ν•˜μ—¬ ν•΄λ‹Ή ν–‰(집)을 빨간색, μ΄ˆλ‘μƒ‰, νŒŒλž€μƒ‰μœΌλ‘œ μΉ ν•  λ•Œ λ“œλŠ” λΉ„μš©μ΄ 각각 주어진닀. λ˜ν•œ, 그듀은 λͺ¨λ“  이웃은 같은 μƒ‰μœΌλ‘œ μΉ ν•  수 μ—†λ‹€λŠ” κ·œμΉ™λ„ μ •ν–ˆλ‹€. 집 i의 이웃은 집 i-1κ³Ό 집 i+1이고, 첫 집과 λ§ˆμ§€λ§‰ 집은 이웃이 μ•„λ‹ˆλ‹€.

λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ ꡬ해야 ν•œλ‹€.

N은 μ΅œλŒ€ 1000 이닀.

 

방법

μ˜€λžœλ§Œμ— dpλ₯Ό ν‘Έλ €λ‹ˆ 머리가 μ•ˆλŒμ•„κ°€μ„œ 2λ…„ 전에 ν’€μ—ˆλ˜ λ‚΄ μ½”λ“œλ₯Ό λ΄€λ‹€... (ν¬μŠ€νŒ…μ€ 이게 λ‚˜μ€‘μ΄μ§€λ§Œ 1010 닀리놓기 보닀 이전에 ν’ˆ..)

dpλŠ” 톡찰λ ₯이닀!!
i λ²ˆμ§Έμ—μ„œ r을 선택할 λ•ŒλŠ” i-1λ²ˆμ§Έμ—μ„œ gλ˜λŠ” bλ₯Ό 선택해야 ν•˜λ‹ˆκΉŒ i-1 λ²ˆμ§ΈκΉŒμ§€μ˜ gλ˜λŠ” b 쀑 값이 μž‘μ€ 것을 μ„ νƒν•΄μ•Όν•œλ‹€.

 

λ©”λͺ¨λ¦¬ μ‹œκ°„
1988 KB 0 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n, r, g, b, x, y, z, ans;
int main() {
    scanf("%d"&n);
 
    for (int i = 0; i < n; i++) {
        scanf("%d %d %d"&r, &g, &b);
        r = min(y, z) + r;
        g = min(x, z) + g;
        b = min(x, y) + b;
        x = r, y = g, z = b;
    }
    ans = min(x, min(y, z));
    printf("%d", ans);
    return 0;
}
cs

 

이 μ½”λ“œλ₯Ό 보고 dp 1차원 배열을 μ΄μš©ν•΄μ„œ ν’€μ–΄λ³ΌκΉŒ ν–ˆλŠ”λ°, dp[r], dp[g], dp[b] λ₯Ό 각각 λΉ„κ΅ν•΄μ•Όν•˜λŠ”λ° 이미 κ°±μ‹ λœ κ°’μœΌλ‘œ λΉ„κ΅ν•˜κ²Œ λ˜μ–΄ λ³€μˆ˜λ₯Ό 더 μ¨μ•Όν•˜λŠ” 상황이고 그러렀면 2차원 λ°°μ—΄λ‘œ ν•˜λŠ”κ²Œ 더 직관적이라고 생각이 λ“€μ–΄ λ³€μˆ˜ 3개만 μ‚¬μš©ν•  수 μžˆλŠ” μœ„μ˜ 방법이 λ² μŠ€νŠΈμΈκ²ƒ κ°™λ‹€.

1차원 λ°°μ—΄λ‘œ ν’€μ–΄λ³ΌκΉŒ ν–ˆλ˜ μ½”λ“œκ°€ κΆκΈˆν•˜λ‹€λ©΄ μ—¬κΈ°λ‘œ

 

λŒ“κΈ€