๐Ÿ Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Programmers] ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜(์ž๋ฐ”)

Dhey 2023. 3. 28. 16:57
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” F(0) = 0, F(1) = 1์ผ ๋•Œ, 1 ์ด์ƒ์˜ n์— ๋Œ€ํ•˜์—ฌ F(n) = F(n-1) + F(n-2) ๊ฐ€ ์ ์šฉ๋˜๋Š” ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5

์™€ ๊ฐ™์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค.

 

2 ์ด์ƒ์˜ n์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ, n๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ 1234567์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„

์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 


์ œํ•œ ์‚ฌํ•ญ

   -  n์€ 2 ์ด์ƒ 100,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 


์ž…์ถœ๋ ฅ ์˜ˆ

n return
3 2
5 5

 


์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  ํ”ผ๋ณด๋‚˜์น˜์ˆ˜๋Š” 0๋ฒˆ์งธ๋ถ€ํ„ฐ 0, 1, 1, 2, 3, 5, ... ์™€ ๊ฐ™์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค.

 

 

 

 


 

ํ’€์ด

์ฒ˜์Œ ์ž‘์„ฑ ์ฝ”๋“œ
class Solution {
    public int solution(int n) {
        int answer = 0;
        int[] Fibo = new int[n+1];
        Fibo[0] = 0;
        Fibo[1] = 1;
        
        //F(n)๊นŒ์ง€์˜ ๊ฐ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ ๋Œ€์ž…
        for(int i=2; i<=n; i++){
            Fibo[i] = (Fibo[i-1] + Fibo[i-2]);
        }
        answer = Fibo[n] % 1234567;
        
        return answer;
    }
}

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ฝ”๋“œ์ด๋‹ค.

 

!๋ฌธ์ œ: ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 2๊ฐœ๋Š” ํ†ต๊ณผํ–ˆ์œผ๋‚˜, ์ œ์ถœ ์‹œ 14๊ฐœ ์ค‘ 7๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋งŒ ํ†ต๊ณผํ•˜์˜€๋‹ค.

!์›์ธ: Fibo์˜ ์ž๋ฃŒํ˜• ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ–ˆ๋‹ค.

 

 

Fibo์˜ ์ž๋ฃŒํ˜•์€ int์ด๋‹ค. int๋Š” -2,147,483,648 ~ 2,147,483,647๊นŒ์ง€์˜ ๊ฐ’๋งŒ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ 1์„ ๋”ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ์ˆซ์ž๋Š” 2,147,483,647์ด ์•„๋‹Œ -2,147,483,648์ด ๋œ๋‹ค.

 

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” ์ˆ˜๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค. 44๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋งŒ ๊ฐ€๋„ 2,971,215,073์œผ๋กœ int์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ Fibo์— ํฐ ๊ฐ’์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์˜ˆ์ƒํ•œ ๊ฐ’๊ณผ ๋‹ค๋ฅธ ๊ฐ’์ด ์ถœ๋ ฅ๋  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

 

๋”ฐ๋ผ์„œ, ๋ฌธ์ œ์—์„œ n๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ 1234567๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ์ด์œ ๋Š”

1234567๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋Š” ํ•ญ์ƒ 1234567๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ๋ฐ–์— ์—†๊ณ , ๊ณ„์‚ฐํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ 1234567๋กœ ๋‚˜๋ˆ ๋„ ์›๋ž˜์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์™€ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

์ตœ์ข… ์ˆ˜์ • ์ฝ”๋“œ
class Solution {
    public int solution(int n) {
        int answer = 0;
        int[] Fibo = new int[n+1];
        Fibo[0] = 0;
        Fibo[1] = 1;
        
        //F(n)๊นŒ์ง€์˜ ๊ฐ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ ๋Œ€์ž…
        for(int i=2; i<=n; i++){
            // 99999์™€ ๊ฐ™์ด ํฐ ์ˆ˜๋ฅผ ๋„ฃ์„ ๊ฒฝ์šฐ int์™€ longํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด
            // ๊ฐ’๋“ค์„ ๋ฌธ์ œ ์กฐ๊ฑด์— ๋งž๊ฒŒ 1234567๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ ์ €์žฅ
            Fibo[i] = (Fibo[i-1] + Fibo[i-2])%1234567;
        }
        answer = Fibo[n];

        return answer;
    }
}

Fibo์˜ ์ž๋ฃŒํ˜•์— ๋งž๋„๋ก Fibo๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ 1234567๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ €์žฅํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•