[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λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ λͺ¨λ μ§μ μΉ νλ λΉμ©μ μ΅μκ°μ μΆλ ₯νλ€.
μκ³ λ¦¬μ¦ λΆλ₯
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°
λμ λ΅
μκ°μ νλ¦
-
μμ νμμ΄ κ°λ₯νκ°?
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λ²λ§ κ³μ°ν΄μ κ° κ²½μ°μ μ΅μκ°μ μ μ₯νκ³ κ³μ μ§ννλ©΄ λλ€.
μ΄λ μμ νμν νΈλ¦¬ λͺ¨μμ κ±°κΎΈλ‘ μ¬λΌκ°λ κ²μ΄λ€.