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๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
๋์ ๋ต
์๊ฐ์ ํ๋ฆ
-
์์ ํ์์ด ๊ฐ๋ฅํ๊ฐ?
2^(N) => 2^(1000)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ๋ค.
์ฌ์ง์ด ์๊ฐ์ ํ์ด 0.5์ด์ด๋ค.
-
๊ฐ ๋จ๊ณ๋ณ๋ก ์๊ฐ ๊ฐ๋ฅํ๊ฐ? (์ต์ ๋ถ๋ถ ๊ตฌ์กฐ์ธ๊ฐ?)
ํ ๋จ๊ณ๊ฐ ๋ค์ ๋จ๊ณ๋ค์ ์ํฅ์ ๋ฏธ์น๋ค.
์ฌ์ง์ด ์ด๋๊น์ง ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ ์์ด ์ดํ์ ๋ชจ๋ ๋จ๊ณ์ ์ํฅ์ ๋ฏธ์น๋ค.
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๋ฒ๋ง ๊ณ์ฐํด์ ๊ฐ ๊ฒฝ์ฐ์ ์ต์๊ฐ์ ์ ์ฅํ๊ณ ๊ณ์ ์งํํ๋ฉด ๋๋ค.
์ด๋ ์์ ํ์ํ ํธ๋ฆฌ ๋ชจ์์ ๊ฑฐ๊พธ๋ก ์ฌ๋ผ๊ฐ๋ ๊ฒ์ด๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1461๋ฒ :: ๋์๊ด (0) | 2020.04.23 |
---|---|
[c++] BOJ 9251๋ฒ :: LCS (ํ์ด ๋ฐ ์ค๋ช + ๋ ๋์ ์ฝ๋) (0) | 2020.04.18 |
[c++] BOJ 1417๋ฒ :: ๊ตญํ์์ ์ ๊ฑฐ (0) | 2020.04.10 |
[c++] BOJ 1038๋ฒ :: ๊ฐ์ํ๋ ์ (0) | 2020.04.05 |
[c++] BOJ 15961๋ฒ :: ํ์ ์ด๋ฐฅ (0) | 2020.04.02 |
Comment