https://www.acmicpc.net/problem/2193
μ½λ
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
long[] dp = new long[91];
dp[1] = 1;
dp[2] = 1;
for(int i=3; i<=90; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
System.out.println(dp[N]);
scan.close();
}
}
νμ΄
λνμ DP λ¬Έμ μ λλ€.
dp[N] -> Nκ° μ리μμ μ΄μΉμλ₯Ό λ§μ‘±νλ κ²½μ°μ μ λΌκ³ μκ°ν΄ λ΄€μλ,
Nμ리μ μ¬ μ μλ μ«μλ 0 κ³Ό 1 μ΄λ€.
N = 6μΌλ,
1) xxxxx0
2) xxxxx1
μ λκ°μ§μ μΌμ΄μ€κ° μλ€.
첫λ²μ§Έ μΌμ΄μ€λ, λ§μ§λ§μ 0μ΄ μ€λ κ²½μ°λ‘, κ·Έ μμλ 0κ³Ό 1μ΄ μ¬ μ μλ€.
λ°λΌμ dp[N] = dp[N-1]κ³Ό λμΌνλ€.
λλ²μ§Έ μΌμ΄μ€λ, λ§μ§λ§μ 1μ΄ μ€λ κ²½μ°λ‘, κ·Έ μμλ 무쑰건 0μ΄ μμΌνλ€.
κ·ΈλΌ κ·Έ μμμ? 0κ³Ό 1μ΄ μ¬ μ μλ€. -> xxx001 νΉμ xxx101
λ°λΌμ dp[N] = dp[N-2]μ λμΌνλ€.
μμ κ²°λ‘ μ λ°νμΌλ‘ μ νμμ μΈμ°λ©΄,
dp[N] = dp[N-1] + dp[N-2] λΌλ μμ΄ μ±λ¦½νλ€.
μ€λͺ μ΄ μ λμ΄μλ κΈμ μ°Έκ³ ν΄μ μμ±ν΄λ³΄λ©΄,
μ΄μΉμμ 쑰건μ μν΄ μ΄μΉμλ 무쑰건 1 0 μΌλ‘ μμν΄μΌνλ€.
N=4μΌλ, 1 0 μ μ μΈν λ€λͺ¨(2μ리)μ λ€μ΄μ¬ μ μλ μ«μλ 00, 01, 10 μ΄λ€.
00, 01, 10 μ«μλ N=2μΌλ, N=3μΌλ μ΄λ―Έ μ¬μ©νλ μ«μλ€μ΄λ€.
λ°λΌμ dp[N] = dp[N-1] + dp[N-2] λΌλ μ νμμ΄ μ±λ¦½νλ€.
* λ¬Έμ μμ μ‘°μ¬ν΄μΌ ν μ μ, Nμ λ²μ(μλ¦Ώμ)λ 90κΉμ§μΈλ°, μΌμ νμ λμ΄κ°λ©΄ intμ λ²μλ₯Ό λ²μ΄λλ²λ¦°λ€.
λ°λΌμ λ°°μ΄μ μλ£νμ intκ° μλ longμΌλ‘ μ μΈν΄μΌ μ λ΅μΌλ‘ μ μΆλλ€.
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1236λ²: μ± μ§ν€κΈ°(ꡬν) (1) | 2020.02.27 |
---|---|
[λ°±μ€] 1449λ²: μ리곡 νμΉ(그리λ, μ λ ¬) (0) | 2020.02.27 |
[λ°±μ€] 2966λ²: μ°κΈ°(μμ νμ, brute force) (0) | 2020.02.26 |
[λ°±μ€] 1065λ²: νμ(μμ νμ, brute force) (0) | 2020.02.26 |
[λ°±μ€] 1149λ²: RGB거리(DP) (0) | 2020.02.26 |
λκΈ