πŸ“ μ•Œκ³ λ¦¬μ¦˜/BOJ

[C++/λ°±μ€€] 1149 : RGB 거리

xxilliant 2023. 2. 21. 20:07
728x90
λ°˜μ‘ν˜•

문제

RGBκ±°λ¦¬μ—λŠ” 집이 N개 μžˆλ‹€. κ±°λ¦¬λŠ” μ„ λΆ„μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 있고, 1번 μ§‘λΆ€ν„° N번 집이 μˆœμ„œλŒ€λ‘œ μžˆλ‹€.

집은 λΉ¨κ°•, 초둝, νŒŒλž‘ 쀑 ν•˜λ‚˜μ˜ μƒ‰μœΌλ‘œ μΉ ν•΄μ•Ό ν•œλ‹€. 각각의 집을 λΉ¨κ°•, 초둝, νŒŒλž‘μœΌλ‘œ μΉ ν•˜λŠ” λΉ„μš©μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ•„λž˜ κ·œμΉ™μ„ λ§Œμ‘±ν•˜λ©΄μ„œ λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•΄λ³΄μž.

  • 1번 μ§‘μ˜ 색은 2번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • N번 μ§‘μ˜ 색은 N-1번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • i(2 ≤ i ≤ N-1)번 μ§‘μ˜ 색은 i-1번, i+1번 μ§‘μ˜ 색과 κ°™μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ§‘μ˜ 수 N(2 ≤ N ≤ 1,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” 각 집을 λΉ¨κ°•, 초둝, νŒŒλž‘μœΌλ‘œ μΉ ν•˜λŠ” λΉ„μš©μ΄ 1번 μ§‘λΆ€ν„° ν•œ 쀄에 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. 집을 μΉ ν•˜λŠ” λΉ„μš©μ€ 1,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 λͺ¨λ“  집을 μΉ ν•˜λŠ” λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

 


 

λ°±μ€€ 싀버 1ν‹°μ–΄ / Dynamic Programming

 

λ§ˆμ§€λ§‰ 쑰건을 잘λͺ» μ½μ–΄μ„œ ν—€λ§Έλ˜ 문제;;;; λ°”λ³Έκ°€

i-1번쨰 μ§‘κ³Ό i+1번째 μ§‘μ˜ 색이 달라야 ν•œλ‹€λŠ” 말은 μ—†λŠ”λ° λ©‹λŒ€λ‘œ κ·Έλ ‡κ²Œ 생각해버렸닀 γ…‹γ…‹

κ²°κ΅­ λ­”κ°€ μ΄μƒν•΄μ„œ 문제λ₯Ό λ‹€μ‹œ 읽어보고 κΉ¨λ‹¬μŒ..

 

이런 μ‹μœΌλ‘œ 숫자 리슀트 μ­‰ μ£Όκ³  ν•©μ˜ μ΅œμ†Ÿκ°’/ μ΅œλŒ“κ°’ κ΅¬ν•˜λŠ” DPλŠ” 이제 μ΅μˆ™ν•΄μ§„ 것 κ°™λ‹€!

많이 ν’€μ–΄λ΄μ„œ κ·ΈλŸ°κ°€ 이전에 쳀던 μ½”ν…Œλ“€ μ€‘μ—μ„œλ„ dpλ¬Έμ œλŠ” λ‹€ ν•΄κ²°ν–ˆμŒ

κ·Έλž˜λ„ μ—°μŠ΅ν•΄μ•Όμ§€...

 

 

#include <iostream>
#include <algorithm>
using namespace std;

int main(){ 
    int n;
    int cost[1001][3] = {0,{0,}};
    cin >> n;
    for (int i = 0; i < n; ++i){
        cin >> cost[i][0] >> cost[i][1] >> cost[i][2];
    }
    for (int i = 0; i<n; ++i) {
        cost[i + 1][0] += min(cost[i][1], cost[i][2]);
        cost[i + 1][1] += min(cost[i][0], cost[i][2]);
        cost[i + 1][2] += min(cost[i][1], cost[i][0]);
    }
    cout << *min_element(begin(cost[n]), end(cost[n]));
    return 0;
}

 

728x90
λ°˜μ‘ν˜•