λ¬Έμ
μμ μ΄μ§ νΈλ¦¬ λλ‘ λ€νΈμν¬ λ¬Έμ λ°λ‘κ°κΈ°
BOJ λλΌλ λμμ λ λμλ₯Ό μ°κ²°νλ λλ‘λ‘ μ΄λ£¨μ΄μ Έ μλ€. μ΄ λλΌμ λλ‘ λ€νΈμν¬λ μμ μ΄μ§ νΈλ¦¬μ ννλ₯Ό κ°μ§λ€.
μλΉμ΄λ BOJ λλΌμ λλ‘ λ€νΈμν¬ νΈλ¦¬μ λμ΄ Hλ₯Ό μκ³ μλ€. νΈλ¦¬μ λμ΄λ₯Ό μλ€λ©΄, λμμ κ°μμ λλ‘μ κ°μλ ꡬν μ μλ€. νΈλ¦¬μ λμ΄κ° HμΈ κ²½μ°μ λμμ κ°μλ 2(H+1)-1κ° μ΄κ³ , λλ‘μ κ°μλ 2(H+1)-2κ°κ° λλ€.
μλ κ·Έλ¦Όμ H = 2μΌ λ, κ·Έλ¦Όμ΄λ€.
μλΉμ΄λ λλ‘ λ€νΈμν¬μ μ°¨λ₯Ό 보λ΄λ €κ³ νλ€. λͺ¨λ μ°¨λ μμ λμμ λμ°© λμκ° μμΌλ©°, κ°μ λμλ₯Ό λ λ² μ΄μ λ°©λ¬Ένμ§ μλλ€. μ°¨μ μμ λμμ λμ°© λμκ° κ°μ μλ μλ€.
λͺ¨λ λμλ₯Ό λ°©λ¬Έν μ°¨μ κ°μκ° λͺ¨λ 1κ°κ° λκΈ° μν΄μ, μλΉμ΄κ° μ°¨λ₯Ό μ΅μ λͺ λλ₯Ό 보λ΄μΌ νλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
νμ΄
μμ κ°μ νΈλ¦¬κ° μμ λ, ν΄λΉ λ¬Έμ λ μ΄λ€ μ νμμΌλ‘ μ΄λ£¨μ΄μ Έ μμκΉ?
첫λ²μ§Έ λ°©λ²μ ν μλμ°¨κ° λ£¨νΈλ₯Ό κ°λ‘μ§λ₯΄λ κ°μ₯ κΈ΄ κΈΈμ΄μ λλ‘λ₯Ό κ°λ κ²μ΄λ€.
h λμ΄μ νΈλ¦¬μμ λ¬Έμ μ λ΅μ T(h)λΌλ μμμΌλ‘ λνλΌ μ μλ€κ³ κ°μ νμ. μ΄λ κ² λλ©΄ λΉ¨κ°μκ³Ό μ£Όν©μμ νμ νμν μ°¨μ κ°μμ΄λ―λ‘ 3κ°λ₯Ό κΈ°λ³ΈμΌλ‘ νκ³ , T(h-2)λΆν° T(1)κΉμ§ 2λ₯Ό κ³±νλ©΄μ κ³μ λν΄μ£Όλ©΄ λλ€.
νμ§λ§ hκ° λμκ°μ λ°λΌμ μμ μ΄μ§ νΈλ¦¬μ΄λ―λ‘ λκ°μ κ·μΉμ΄ λ°λ³΅λκ³ , μ΄λ₯Ό μ νμμΌλ‘ λνλΌ μ μλλ° T(i) = T(i-1) + T(i-2)*2
μ΄λ€.
λ λ²μ§Έλ‘λ μμ ν νΈλ¦¬μ μλμ λ νΈλ¦¬λ‘ λλλ λ°©λ²μ΄λ€.
μ΄λ κ² λνλ΄μμ λ jλ₯Ό λΉ¨κ°μμΌλ‘ νμν νΈλ¦¬μ hλΌκ³ μκ°ν΄λ³΄μ. jλ i-jκ° 1μ΄ λ λκΉμ§ μ¦, μλμ μ£Όν©μ νΈλ¦¬ λμ΄κ° 1μ΄ λ λκΉμ§ μ§νλλ©°, μμμ λΉ¨κ°μ νΈλ¦¬κ° 0μΌ λλΆν° μμνλ€.
μ νμμ λ€μκ³Ό κ°λ€.
λ°λΌμ ν΄λΉ λ¬Έμ λ 첫λ²μ§Έ λ°©λ²κ³Ό λλ²μ§Έ λ°©λ²μ λͺ¨λ μννλ©΄μ κ°μ₯ μμ κ°μ μ°Ύμλ΄λ©΄ λλ€. μ λ ₯ κ°μ΄ μ μ λλ 첫λ²μ§Έ λ°©λ²μ΄ 무쑰건 μ λ΅μΈ κ²μ²λΌ 보μ΄μ§λ§, μ λ ₯ κ°μ΄ 컀μ§κ² λλ©΄ κ·Έλ μ§ μμ μλ μλ€.
λν, λλ²μ§Έ λ°©λ²μ νΈλ¦¬μ λμ΄λ§νΌ μ§νν΄μΌ νκ³ λͺ¨λ λμ΄μ νΈλ¦¬μ λν΄ μ λ΅μ 미리 ꡬν΄λμΌλ―λ‘ O(n^2)μ΄μ§λ§ λμ΄κ° 60μ΄ μ΅λμ΄λ―λ‘ μΆ©λΆνλ€.
μ½λ
#include <iostream>
#include <math.h>
using namespace std;
int main() {
long long powArr[61];
for (int i = 1; i < 61; i++) {
powArr[i] = pow(2, i);
}
long long result[61] = { 1,1,3 };
for (int i = 3; i < 61; i++) {
result[i] = result[i - 1] + result[i - 2] * 2;
for (int j = 1; i-j > 0; j++) {
long long tmp = result[j - 1] + result[i - j] * powArr[j];
if (tmp < result[i])
result[i] = tmp;
}
}
int h; cin >> h;
cout << result[h];
}
κ°μ
- λ λ²μ§Έ λ°©λ²μ λ°λ³΅μ μΈ ν¨ν΄μ΄ λνλκΈ° λλ¬Έμ μκ°μ μ€μΌ μλ μκ² μ§λ§, μκ°μ΄ μ΄λ―Έ 0msμ΄κΈ° λλ¬Έμ λ±ν μ€μ΄μ§ μμλ λ κ² κ°λ€.
- μ λ ₯μ λ¨Όμ λ°κ³ μ λ ₯κΉμ§μ result λ°°μ΄λ§ μ±μ°λ κ²λ μκ°μ μ€μΌ μ μλ€.
κ²°κ³Ό
μμ΄λ | λ©λͺ¨λ¦¬ | μκ° | μ½λ κΈΈμ΄ |
---|---|---|---|
gmldms784 | 2208 | 0 | 730 |
'Algorithm λ¬Έμ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[c++] BOJ 1062 :: κ°λ₯΄μΉ¨ (0) | 2021.08.10 |
---|---|
[c++] BOJ 17244 :: μλ§λ€μ°μ° (0) | 2021.08.02 |
[c++] BOJ 18240 :: μ΄μ§ νμ νΈλ¦¬ 볡μνκΈ° (0) | 2021.07.11 |
[c++] BOJ 19535 :: γ·γ·γ·γ (0) | 2021.07.11 |
[c++] BOJ 3584 :: κ°μ₯ κ°κΉμ΄ κ³΅ν΅ μ‘°μ (0) | 2021.07.03 |
Comment