[c++] BOJ 1149๋ฒˆ :: RGB๊ฑฐ๋ฆฌ

RGB ๊ฑฐ๋ฆฌ

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งž์€ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
0.5 ์ดˆ (์ถ”๊ฐ€ ์‹œ๊ฐ„ ์—†์Œ) 128 MB 42269 19789 14882 47.682%

๋ฌธ์ œ

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. ์™„์ „ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ๊ฐ€?

    2^(N) => 2^(1000)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์‹ฌ์ง€์–ด ์‹œ๊ฐ„์ œํ•œ์ด 0.5์ดˆ์ด๋‹ค.

  2. ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์ƒ๊ฐ ๊ฐ€๋Šฅํ•œ๊ฐ€? (์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ์ธ๊ฐ€?)

    ํ•œ ๋‹จ๊ณ„๊ฐ€ ๋‹ค์Œ ๋‹จ๊ณ„๋“ค์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

    ์‹ฌ์ง€์–ด ์–ด๋””๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๊ฒƒ ์—†์ด ์ดํ›„์˜ ๋ชจ๋“  ๋‹จ๊ณ„์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

ex_)

์ง‘1 ์ง‘2 ์ง‘3 ์ง‘4
1 9 100 1000
2 8 101 1001
3 1 7 1

 ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ง‘1๊ณผ ์ง‘2๋กœ๋งŒ ๋ณด๋ฉด ๋”ํ•ด์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋Š” (1,1)์„ ํƒํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ง‘3๊นŒ์ง€ ๋ณด๋ฉด (1,8,7)์ด ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์˜ ์ง‘ํ•ฉ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ง‘1์˜ ์„ ํƒ์€ ์ง‘3์˜ ์„ ํƒ๊ณผ ๋…๋ฆฝ์ ์ด์ง€ ์•Š๋‹ค.

์ด์–ด์„œ ์ง‘4๊นŒ์ง€ ๋ณด์•˜์„ ๋•Œ๋Š” (1,1,100,1)์œผ๋กœ ๋ฐ”๋€๋‹ค. ๊ฒฐ๊ตญ ํŠน์ •ํ•œ index๊นŒ์ง€์˜ ์ตœ์ ์˜ ๋‹ต์ด ์ดํ›„์˜ ์ตœ์ ์˜ ๋‹ต์„ ํ™•์‹ ์‹œํ‚ฌ ์ˆœ ์—†๋‹ค.

 ๊ทธ๋ ‡๋‹ค๋ฉด ์™„์ „ํƒ์ƒ‰์€ ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ , ๋‹จ๊ณ„ ๋ณ„๋กœ ์ชผ๊ฐœ์„œ ๋ณผ ์ˆ˜๋„ ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

์–ด์จŒ๋“  ํ•œ ๋‹จ๊ณ„์˜ ์„ ํƒ์ด ๋ชจ๋“  ๋‹จ๊ณ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฑฐ๋ผ๋ฉด ์ง‘1๋ถ€ํ„ฐ ์ง‘N๊นŒ์ง€ RGB์ค‘ ํ•˜๋‚˜๋ฅผ ํƒํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋˜ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์ž.

์ด๋Ÿด ๋•Œ๋Š” ๋Œ€๋ถ€๋ถ„ ์‹œ๊ฐ„์„ ์–ป๊ธฐ์œ„ํ•ด ๊ณต๊ฐ„์„ ์ข€ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์šฐ์„  ์™„์ „ ํƒ์ƒ‰์ผ ๋•Œ์˜ ์„ ํƒ์„ ํŠธ๋ฆฌ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 ์ง‘1์˜ ์„ ํƒ์„ ์šฐ์„  1๋กœ ๊ณ ์ •์‹œ์ผฐ์„ ๋•Œ ์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ๊ฐ€ ์ค„์ง€์–ด์„œ ๋‚˜์˜จ๋‹ค. ํŠธ๋ฆฌ๋Š” ์ง‘์˜ ๊ฐฏ์ˆ˜ N๋งŒํผ ์•„๋ž˜๋กœ ๋ป—์–ด ๋†’์ด๊ฐ€ N์ด ๋  ๊ฒƒ์ด๋ฉฐ, ๋†’์ด๊ฐ€ 1์”ฉ ๋”ํ•ด์งˆ ๋•Œ๋งˆ๋‹ค ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋Š” 2๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ํŠธ๋ฆฌ๋ฅผ binary tree๋ผ๊ณ  ํ•œ๋‹ค.

์™„์ „ํƒ์ƒ‰์€ ์ด์™€๊ฐ™์ด binary tree๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ง‘1์˜ ์„ ํƒ์€ 3๊ฐ€์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3*2^(N)-1์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋‚ด์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 ๋‹ค๋งŒ ์œ„์˜ ๊ทธ๋ฆผ์—์„œ ์ง‘3์˜ ์„ ํƒ์ด 1๋กœ ๊ฒน์น˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฅผ ๋ฌถ์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ์ด๋ ‡๊ฒŒ ๊ฒน์นœ ๋ถ€๋ถ„์˜ ๊ณ„์‚ฐ์€ ํ•œ๋ฒˆ๋งŒ ํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

์ฆ‰, ์ด ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด์ง€๋งŒ ์ตœ์ ๋ถ€๋ถ„๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋Š” ์•Š์€ ๋ฌธ์ œ์ด๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด ๊ฐ’์ด ์ด๋ฏธ ๊ณ„์‚ฐ๋˜์—ˆ์Œ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผํ•˜๋Š”๋ฐ, ๋ณธ์ธ์€ ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๊ณ  vector๋กœ ์ €๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค.

 ๋ณธ์ธ์€ memorizeํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์“ฐ๋ฉด์„œ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ „๊ฐœํ•˜์ง€ ์•Š๊ณ  ์• ์ดˆ์— ๋ฌถ์ธ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค 1์”ฉ ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ง‘์ด ์žˆ์œผ๋ฏ€๋กœ N(N-1)/2 ๋งŒํผ์˜ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. N์˜ ์ตœ๋Œ€๋Š” 1,000์ด๋ฏ€๋กœ N^2์ด๋ผ๊ณ  ํ•ด๋„ 10^6์ด๋‹ˆ int ํ˜•(4byte)๋ฅผ ์ €์žฅํ•  ๋•Œ 4*10^6byte = 4MB ์ •๋„ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ์ œ

 

์œ„์—์„œ ์†Œ๊ฐœํ•œ ์˜ˆ์ œ์—์„œ ์ง‘1์˜ ์„ ํƒ์„ 3์œผ๋กœ ๊ณ ์ •ํ–ˆ์„ ๋•Œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

๋งจ ์•„๋ž˜ ๋…ธ๋“œ๋ถ€ํ„ฐ ์˜ฌ๋ผ์˜ค๋ฉด์„œ ๋‘ ๊ฐœ์˜ ๊ฐ’ ์ค‘ ์ž‘์€ ๊ฐ’์„ ์œ„์˜ ๋…ธ๋“œ ๊ฐ’์— ๋”ํ•ด์ค€๋‹ค. ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด

 

์ด๋Ÿฐ ํŠธ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ๋งจ ์œ„์˜ ๋…ธ๋“œ๊ฐ’ 112๊ฐ€ ์ง‘1์˜ ๊ฐ’์ด 3์ผ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ์˜ ๊ฐ’์ด๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์ง‘1์˜ ๊ฐ’์ด 1์ผ ๋•Œ, 2์ผ ๋•Œ ๋ชจ๋‘ ์ง„ํ–‰ํ•œ ํ›„ 3๊ฐ€์ง€ ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int RGB[1000][3];
int N;

int calMin(int first_num) {

    vector<int> arr[1000];
    for (int i = N-1; i >= 0; i--) {
        int plus_num = first_num;
        int j = i+1;
        while (j--) {
            int index = (plus_num++ + i) % 3;
            arr[i].push_back(RGB[i][index]);
        }
        first_num = (first_num+2)%3+1;
    }

    vector<int> result[1000];
    vector<int>::iterator iter;
    for (int i = N-1; i >= 1; i--) {
        for (int j = 0; j < arr[i].size()-1; j++) {
            arr[i - 1][j] += min(arr[i][j], arr[i][j+1]);
        }
    }
    return arr[0][0];
}

int main() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> RGB[i][j];
        }
    }

    int result=1e9;
    for (int i = 0; i <= 2; i++) {
        result = min(result, calMin(i));
    }

    cout << result;
}

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

4
1 2 3
9 8 1
100 101 7
1000 1001 1
103
4
1 2 3
100 101 7
9 8 1
1000 1001 1
17

๋‹ค๋ฅธ ๋‹ต

์ด๋ ‡๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ํ•  ํ•„์š” ์—†์ด ํ•œ ์ง‘์”ฉ ๋ฐ›์•„์˜ค๋ฉด์„œ 6๋ฒˆ์”ฉ๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ง‘1์˜ RGB๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์ง‘2์˜ RGB๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ,

์ง‘2 R => ์ง‘1 G or ์ง‘1 B
์ง‘2 G => ์ง‘1 R or ์ง‘1 B
์ง‘3 B => ์ง‘1 R or ์ง‘1 G

์ด๋ ‡๊ฒŒ 6๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด์„œ ๊ฐ ๊ฒฝ์šฐ์— ์ตœ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Š” ์œ„์— ํ‘œ์‹œํ•œ ํŠธ๋ฆฌ ๋ชจ์–‘์„ ๊ฑฐ๊พธ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•