λ¬Έμ
0κ³Ό 1λ‘λ§ μ΄λ£¨μ΄μ§ μλ₯Ό μ΄μ§μλΌ νλ€. μ΄λ¬ν μ΄μ§μ μ€ νΉλ³ν μ±μ§μ κ°λ κ²λ€μ΄ μλλ°, μ΄λ€μ μ΄μΉμ(pinary number)λΌ νλ€. μ΄μΉμλ λ€μμ μ±μ§μ λ§μ‘±νλ€.
- μ΄μΉμλ 0μΌλ‘ μμνμ§ μλλ€.
- μ΄μΉμμμλ 1μ΄ λ λ² μ°μμΌλ‘ λνλμ§ μλλ€. μ¦, 11μ λΆλΆ λ¬Έμμ΄λ‘ κ°μ§ μλλ€.
μλ₯Ό λ€λ©΄ 1, 10, 100, 101, 1000, 1001 λ±μ΄ μ΄μΉμκ° λλ€. νμ§λ§ 0010101μ΄λ 101101μ κ°κ° 1, 2λ² κ·μΉμ μλ°°λλ―λ‘ μ΄μΉμκ° μλλ€.
N(1 β€ N β€ 90)μ΄ μ£Όμ΄μ‘μ λ, Nμ리 μ΄μΉμμ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
## μ λ ₯
첫째 μ€μ Nμ΄ μ£Όμ΄μ§λ€.
## μΆλ ₯
첫째 μ€μ Nμ리 μ΄μΉμμ κ°μλ₯Ό μΆλ ₯νλ€.
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ μΆ | μ λ΅ | λ§ν μ¬λ | μ λ΅ λΉμ¨ |
---|---|---|---|---|---|
2 μ΄ | 128 MB | 91755 | 39024 | 29652 | 41.053% |
https://www.acmicpc.net/problem/2193
νμ΄
λ°©λ² 1 (μμ)
λ¬Έμ λ₯Ό μ΄ν΄λ³΄λ©΄ μλμ κ°μ΄ λκ°μ§μ κ·μΉμ λ³Όμμλ€.
- μ΄μΉμλ 0μΌλ‘ μμνμ§ μμ.
- μ΄μΉμλ 1μ΄ λλ² μ°μμΌλ‘ λνλμ§μμ.
μ΄ν΄λ³΄λ©΄ μλμ κ°μ΄ μ€λͺ ν μμλ€.
1) 4μ리μ μ€ 2κ°λ 3μ리μμ λͺ¨λ κ°μμ κ°λ€.
2) 4μ리μ μ€ 1κ°λ 2μ리μμ λͺ¨λ κ°μμ κ°λ€.
μ΄λ n=5
μΌλλ μ μ©λλ€.
1) 5μ리μ μ€ 3κ°λ 4μ리μμ λͺ¨λ κ°μμ κ°λ€.
2) 5μ리μ μ€ 2κ°λ 3μ리μμ λͺ¨λ κ°μμ κ°λ€.
μ΄λ₯Ό ν΅ν΄ μ νμμ ꡬνλ©΄
dp[n] = dp[n-1] + dp[n-2]
λ€μμΌλ‘ μ΄λ¬Έμ λ₯Ό 보면 nμ λ²μκ° 1~90κΉμ§ μ΄λ€. n=90μΌ κ²½μ°λ₯Ό 보면 46νμ΄ λ λ, 2971215073μ΄ λμ΄,
int
μ λ²μλ₯Ό μ΄κ³Όνκ² λλ€. μ¦, νΉμ μλ‘ λλ λλ¨Έμ§κ°(λͺ¨λλ¬)λ₯Ό μ¬μ©ν΄μ μΆλ ₯νκ±°λ, int μ΄μμ μλ£νμ μ΄μ©ν΄μΌνλ€. (μ΄ν΄κ° μκ°λ€λ©΄ λ¬Έμ μ μ νμμ 보면λλ€. μ΄ μ νμμ νΌλ³΄λμΉμμ΄κ³Ό κ°μκ²μ λ³Όμμλλ°, νΌλ³΄λμΉ μμ΄μ λμ ν΄μ κ³μ°ν΄λ³΄λ©΄ λ΅μ΄ λμ¨λ€... κΈ°νκΈμμ μΌλ‘ μ¦κ°λλ€.) μ΄μ¨λ μ΄λ¬ν μ΄μ λλ¬Έμlong
μλ£νμ μ¬μ©ν΄μΌνλ€!
μ½λ
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int n;
static long dp[] = new long[91];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2]; //μ νμ λμ
.
}
System.out.println(dp[n]);
}
}
λ€μ λ°©λ²λ μ΄ν΄λ³΄μ.
λ°©λ²2(μ΄μ°¨μλ°°μ΄)
μ΄ν΄λ³΄λ©΄, 3μ리μμμ 4μ리μκ° λλ λΆλΆμ΄λ€. μ΄λ μΆκ°λλ λΆλΆμ λΉ¨κ°μμΌλ‘ νμνκ²μ΄λ€.
κ·μΉμ μ΄ν΄λ³΄λ©΄, μ΄μΉμμμ 1μ΄ λλ² μ°μμΌλ‘ λνλμ§ μμΌλ―λ‘ 11
μ΄ λνλλκ²μ λΆκ°λ₯νλ€. μ¦ λ§μ§λ§μ λλλ μλ₯Ό κΈ°μ€μΌλ‘ μ΄ν΄λ³΄λ©΄ λ κ²μ΄λ€. 3μ리μμμ λ§μ§λ§μ λλλμκ° 0μΌ κ²½μ°μλ 0,1 μ΄ λ€μ΄μ¬μμκ³ , 1μΌκ²½μ°μλ 0λ§ κ°λ₯νλ€.
A : 0μΌλ‘ μμλλ κ²½μ° : 00 01 κ°λ₯
dp[4][0] = dp[3][0] + dp[3][1]
B: 1λ‘ μμλλ κ²½μ°: 10 κ°λ₯
dp[4][1] = dp[3][0]
μ΄λ κ² λνλΌμ μκ² λ€. μ΄λ₯Ό ν΅ν΄ μ νμμ λ½μ보면?
dp[n][0] = dp[n-1][0] + dp[n-1][1]
dp[n][1] = dp[n-1][0]
μ΄λ κ² λλ μ ꡬν΄μ§κ² λλ€. κ·Έλ¦¬κ³ λκ°μ§ κ²½μ°λ₯Ό ν©μ³μ€λ€λ©΄ μνλ λ΅μ ꡬν μμλ€.
μ½λ
package κΈ°μ΄1.Day16.μ ν΄μ;
import java.util.Scanner;
public class μ΄μΉμ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[][] dp = new long[n+1][2]; //int ν μ μΈμμ λ²μκ° μ΄κ³Όλλ€.
/*
μ΄λ κ² μ΄ν΄νμ. n=2 μΌλ, 2μ리μ 00 01 10 11 μ΄λ κ² λμ¬κ²μ΄λ€.
μ¬κΈ°μ dp[μ리μ][λ§μ§λ§λ·μ리] = μ΄μΉμμ κ°μ λ‘ μ μΈνμ.
μ¦, dp[2][0] μ΄λΌλ©΄ {0}0 {0}1 μ΄λ κ² λ κ²μ΄κ³ , μ΄μΉμμ κ°―μλ 0μ΄λ€. μλνλ©΄ μ μΌμμλ 0μΌμκ° μκΈ°λλ¬Έ.
dp[2][1] μ΄λΌλ©΄ {1}0 {1}1 μ΄λ κ² λ κ²μ΄λ€. μ΄μΉμμ κ°μλ 1μ΄λ€.
*/
dp[1][1] = 1;
dp[1][0] = 0;
for(int i=2; i<=n; i++){
dp[i][0] = dp[i-1][0] + dp[i-1][1]; //[4][0] -> {100}0, {100}1
dp[i][1] = dp[i-1][0]; // [4][1] -> {101}0 μ΄λ°μμΌλ‘...!
}
System.out.println(dp[n][0] + dp[n][1]);
sc.close();
}
}