Algorithm๐Ÿฅ‡

2193.์ด์นœ์ˆ˜

hae02y 2023. 11. 6. 06:03
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์ง„์ˆ˜ ์ค‘ ํŠน๋ณ„ํ•œ ์„ฑ์งˆ์„ ๊ฐ–๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด๋“ค์„ ์ด์นœ์ˆ˜(pinary number)๋ผ ํ•œ๋‹ค. ์ด์นœ์ˆ˜๋Š” ๋‹ค์Œ์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•œ๋‹ค.

  1. ์ด์นœ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ์ด์นœ์ˆ˜์—์„œ๋Š” 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 (์—ญ์ˆœ)

๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘๊ฐ€์ง€์˜ ๊ทœ์น™์„ ๋ณผ์ˆ˜์žˆ๋‹ค.

  1. ์ด์นœ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ.
  2. ์ด์นœ์ˆ˜๋Š” 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();  
}  
}
๋ฐ˜์‘ํ˜•