Computer Science/Algorithms

๐Ÿฃ Fibonacci Sequence

metamong 2024. 6. 26.

๐Ÿฃ ์œ ๋ช…ํ•˜๊ณ  ์œ ๋ช…ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด(Fibonacci Sequence)์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765 ...

โ‘  Recursive Definition

๐Ÿฃ ์ฆ‰, Fn์„ n๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์žฌ๊ท€ ๋ฐฉ์‹์œผ๋กœ Fn์„ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

F(n) = F(n-1) + F(n-2)

with initial conditions F(0) = 0 and F(1) = 1

 

: ์ฆ‰, Fn์„ ๊ตฌํ•  ๋•Œ Fn-1๊ณผ Fn-2๋ฅผ ์‚ฌ์šฉํ•ด ์žฌ๊ท€์  ํ˜ธ์ถœ๋กœ Fn์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. Fn์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(2^n). Fn ํ˜ธ์ถœ์— ๋™์ผ ์žฌ๊ท€ํ•จ์ˆ˜ ๋‘ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ.

n=int(input())

def get_fibonacci(n):
    if n==1:
        return 1
    elif n==0:
        return 0
    else:
        return get_fibonacci(n-2)+get_fibonacci(n-1)

if n>=2:
    print(get_fibonacci(n))
else:
    if n==0: print(0)
    else: print(1) #n==1

โ‘ก Memoization DP technique

๐Ÿฃ ์œ„ โ‘  ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊ฒฐ์ •์ ์ธ ๋‹จ์ ์€ ๋ฐ”๋กœ ์ค‘๋ณต ํ˜ธ์ถœ๋˜๋Š” Fx(0<=x<N)์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ์ . ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋”ฐ์กŒ์„ ๋•Œ ๋น„ํšจ์œจ์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด F8์„ ๊ตฌํ•˜๊ณ ์ž ํ•  ๋•Œ, F7 ๋”ฐ๋กœ, F6๋”ฐ๋กœ ํ˜ธ์ถœ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  F7์—์„œ ๋˜ F6๊ณผ F5๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ์ด ๋•Œ F6์ด ๋‘๋ฒˆ์ด๋‚˜ ํ˜ธ์ถœ๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿฃ ์ค‘๋ณตํ˜ธ์ถœ๋˜๋Š” Fx์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Fx(0<=x<N)๊ฐ€ ๊ฐ๊ฐ ์ตœ๋Œ€ 2๋ฒˆ๋งŒ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๊ฒŒ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ…Œํฌ๋‹‰์„ ํ™œ์šฉํ•ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ํ™œ์šฉํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

: ์•ž์„  ๋‘ ์ˆซ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ์ˆซ์ž๋ฅผ ๊ตฌํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ(memoization DP) ์ง„ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋งจ ์•ž ์ˆซ์ž 0๊ณผ ๋‚˜ ์ž์‹  ๋ฐ ๋‚˜ ์ž์‹  ์•ž์˜ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ , ๊ทธ ์‚ฌ์ด์˜ ๋ชจ๋“  ์ˆซ์ž๋Š” ๊ฐ๊ฐ ๋‘ ๋ฒˆ๋งŒ ํ˜ธ์ถœ. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋Œ€๋žต์ ์œผ๋กœ O(2N)์ด๋ผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)

โ‘ข Pisano Period

๐Ÿฃ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ m์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋Š” ์ฃผ๊ธฐ๋ฅผ ์ด๋ฃฌ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™œ์šฉ. k(m)์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ผ๊ณ  ํ•˜๋ฉด k(m)๊ณผ ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ ์„ฑ์งˆ์ด ์กด์žฌํ•œ๋‹ค.

 

๐Ÿฃ ์ผ๋‹จ ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋Š” ๋ชจ๋“  m์— ๋Œ€ํ•ด ์กด์žฌํ•œ๋‹ค. ์ฆ‰, m์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์˜ ์ˆ˜์—ด์€ ์ฃผ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

→ Fn%m์„ ๊ตฌํ•œ ๋’ค, (F(n-1)%m, F(n)%m)์€ ๋น„๋‘˜๊ธฐ์ง‘์˜ ์›๋ฆฌ์— ์˜ํ•ด m^2 ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋ฌด์กฐ๊ฑด ํฌํ•จ. ๋”ฐ๋ผ์„œ, ๋น„๋‘˜๊ธฐ์ง‘์˜ ์›๋ฆฌ์— ์˜ํ•ด (F(n-1)%m, F(n)%m)์€ ์ตœ๋Œ€ m^2๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด๋Š” ๊ณง (m^2+1)๋ฒˆ์งธ์˜ pair (F(n-1)%m, F(n)%m))๋Š” ์•ž์„  pair ์ค‘ ์ ์–ด๋„ 1๊ฐœ ์ด์ƒ์˜ pair์™€ ์ค‘๋ณต๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋Š” ๋ฌด์กฐ๊ฑด ์กด์žฌํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , k(m)์€ ์ตœ๋Œ€ m^2+1์ดํ•˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

ex) mod 10์—์„œ ์•ž์˜ ์ˆ˜์™€ ์ง์„ ์ด๋ฃจ์–ด (0,0) ~ (0,9) / (1,0) ~ (1,9) ~ ์™€ ๊ฐ™์ด ์ด 10^2์˜ 100๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์กด์žฌ. ๋”ฐ๋ผ์„œ ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ k(10)์˜ ์ตœ๋Œ“๊ฐ’์€ 101์ด๋‹ค. F1๊ณผ F2๋Š” 1, 1์ด๋ฏ€๋กœ 1, 1์ด ๋‚˜์˜ฌ ๋•Œ ๋ฉˆ์ถฐ์„œ ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

ex) mod 11 ์˜ˆ์‹œ(k(11) = 8) : ๊ทธ๋ฆผ ์ถœ์ฒ˜: BOJ 9471

 

: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ mod m์œผ๋กœ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ์—์„œ, ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ์˜ ๊ธธ์ด๋ฅผ k(m)๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ ๊ด€๋ จ 7๊ฐœ์˜ ์„ฑ์งˆ์ด ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

(1) m>2์ธ ๊ฒฝ์šฐ k(m)์€ ์ง์ˆ˜

(2) ์ž„์˜์˜ ์ง์ˆ˜ ์ •์ˆ˜ n>2์— ๋Œ€ํ•ด์„œ k(m) = n์ธ m์ด ํ•ญ์ƒ ์กด์žฌ

(3) k(m)<=m^2-1

(4) k(2^n)=3x2^(n-1)

(5) k(5^n)=4x5^n

(6) k(2x5^n)=6n

(7) n>=2๋ผ๋ฉด k(10^n) = 15x(10^(n-1))

โ‘ฃ Power by Divide & Conquer (Matrix) technique

๐Ÿฃ ์œ„ โ‘ ๊ณผ โ‘ก์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ•๊ณผ ๋‹ฌ๋ฆฌ, '๊ฑฐ๋“ญ์ œ๊ณฑ์„ ํ™œ์šฉํ•œ ๋ถ„ํ• ์ •๋ณต'์œผ๋กœ ๋” ๋น ๋ฅธ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

F(n+2) = F(n+1) + F(n)

F(n+1) = F(n) + F(n-1)

: ์œ„ ๋‘ ์‹์„ ํ–‰๋ ฌ์„ ํ™œ์šฉํ•ด์„œ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.(n>=2)

 

: ์œ„ ์‹์„ Fn(n>=1)์— ๊ด€ํ•ด ์—ฐ์‡„์ ์œผ๋กœ (1 1 1 0) 2x2 ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

: ์ฆ‰, Fn์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” (1 1 1 0) 2x2 ํ–‰๋ ฌ์„ n-1๋ฒˆ ์ œ๊ณฑํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ Power by Divide & Conquer ํ…Œํฌ๋‹‰์„ ํ™œ์šฉํ•ด O(log(n-1)), ์ฆ‰ O(logn)์œผ๋กœ Fn์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. (1 1 1 0) 2x2 ํ–‰๋ ฌ์„ n-1๋ฒˆ ์ œ๊ณฑํ•œ ๋’ค ์™ผ์ชฝ ์ƒ๋‹จ ์›์†Œ([0][0])๊ฐ€ Fn.

n=int(input())
BIG = 1_000_000_007

def get_power(a,b,c):
    if b <= 1:
        return [[a[0][0]%BIG,a[0][1]%BIG],[a[1][0]%BIG,a[1][1]%BIG]]
        
    x = get_power(a,b//2,c)

    if b % 2 == 0:
        return prod(x,x)
    else:
        return prod(prod(x,x),a)

def prod(A,B):
    a,b,c,d=A[0][0],A[0][1],A[1][0],A[1][1]
    e,f,g,h=B[0][0],B[0][1],B[1][0],B[1][1]
    return [[(a*e+b*g)%BIG,(a*f+b*h)%BIG],[(c*e+d*g)%BIG,(c*f+d*h)%BIG]]

core = [[1,1],[1,0]]

matrix = get_power(core,n-1,BIG)

print(matrix[0][0]%BIG)

 

๐Ÿฃ ๋‘ ํ–‰๋ ฌ A์™€ B์˜ ๊ณฑ(2x2 ํ–‰๋ ฌ)์˜ ๊ฒฐ๊ณผ ํ–‰๋ ฌ์„ ์ถœ๋ ฅํ•˜๋Š” prod() ํ•จ์ˆ˜ ์ƒ์„ฑ

 

๐Ÿฃ Fn์€ core ํ–‰๋ ฌ์„ n-1 ์ œ๊ณฑํ•œ 2x2 ํ–‰๋ ฌ์˜ ์™ผ์ชฝ ์ƒ๋‹จ ์›์†Œ([0][0])์ž„์„ ์•Œ๊ณ , n-1 ์ œ๊ณฑ์„ divide & conquer๊ธฐ๋ฒ•์œผ๋กœ ์ง„ํ–‰

โ‘  a์˜ b์Šน์—์„œ b๊ฐ€ 1์ดํ•˜์ผ ๋•Œ a ์ž์ฒด๋ฅผ ์ถœ๋ ฅ

โ‘ก a์˜ b์Šน์—์„œ b๊ฐ€ 1๋ณด๋‹ค ํด ๋•Œ b๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ b//2ํ•œ get_power() ๊ฒฐ๊ณผ๋ฅผ x๋ผ๊ณ  ํ•˜๋ฉด prod(x,x) / b๊ฐ€ ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ prod(prod(x,x),a)

๋‹จ์ˆœ ๊ณฑ์ด ์•„๋‹Œ ํ–‰๋ ฌ ๊ณฑ์ด๋ฏ€๋กœ prod()ํ•จ์ˆ˜ ์‚ฌ์šฉ๋งŒ ์ฃผ์˜

 

๐Ÿฃ ๋‹ค๋งŒ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฐ ์ˆ˜๋ฅผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋กœ ์ถœ์ œ. modulo operation ์„ฑ์งˆ ํ™œ์šฉํ•ด์„œ ๋„์ค‘๋„์ค‘ ๊ตฌํ•œ ๋‚˜๋จธ์ง€๋ฅผ ๊ณฑ/๋”ํ•˜๊ธฐ ์ž์œ ๋กญ๊ฒŒ ํ•ด์ฃผ๋ฉด ๋จ.

โ‘ค Sigma Fibonaccis

๐Ÿฃ ํ”ผ๋ณด๋‚˜์น˜ ๊ด€๋ จ ์—ฌ๋Ÿฌ sigma ํ•ฉ ํ˜•ํƒœ๋Š” ๋‹ค์–‘ํ•œ ์„ฑ์งˆ์„ ๊ฐ€์ง„๋‹ค. 

(1) F1~Fn๊นŒ์ง€์˜ n๊ฐœ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ

 = F(n+2) - 1


(์ฆ๋ช…)

(2) F1~Fn๊นŒ์ง€์˜ ํ™€์ˆ˜๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ

= n์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ F(n+1), n์ด ์ง์ˆ˜์ผ ๊ฒฝ์šฐ F(n)


(์ฆ๋ช…)

(3) F1~Fn๊นŒ์ง€์˜ ์ง์ˆ˜๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ

= n์ด ์ง์ˆ˜์ผ ๊ฒฝ์šฐ F(n+1) - 1, n์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ F(n) - 1


(์ฆ๋ช…)

(4) F1~Fn๊นŒ์ง€์˜ ๋ชจ๋“  ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ•ฉ

= F(n) x F(n+1)


(์ฆ๋ช…)

Exercises

โ˜… <BOJ B2 10870 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 5> โ˜… [โ‘  Recursive Defintion ํ™œ์šฉ]

: ์ตœ๋Œ€ 20๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. ์ „ํ˜•์ ์ธ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ด O(2^n)์œผ๋กœ ๊ตฌํ˜„.

 

โ˜… <BOJ B2 2747 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: O(n)์„ ํ™œ์šฉํ•ด memoization DP technique์œผ๋กœ ์ตœ๋Œ€ 45๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

 

โ˜… <BOJ B1 2748 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 2> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: ์œ„ 2747๋ฒˆ ๋ฌธ์ œ์™€ ๋™์ผ. ์ตœ๋Œ€ 90๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

 

โ˜… <BOJ B1 4150 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: ์œ„ 2747๊ณผ ๋˜‘๊ฐ™์ด ๋™์ผ. ๋‹ค๋งŒ, ํฐ ์ˆ˜ ์—ฐ์‚ฐ ์ง€์›ํ•˜๋Š” python์—์„œ ์ •์„๋Œ€๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

โ˜… <BOJ S5 10826 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 4> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: 2748๋ฒˆ ๋ฌธ์ œ์™€ ๋™์ผํ•˜๊ฒŒ memoization DP technique ํ™œ์šฉ. ์ตœ๋Œ€ 10,000๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ, ํŒŒ์ด์ฌ์—์„œ๋Š” ํฐ ์ˆ˜์˜ ์—ฐ์‚ฐ๋„ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‚˜, DP technique ์‚ฌ์šฉ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ์„ ์œ„ํ•ด ์•ž์„  ๋‘ ์ˆ˜์˜ ๊ณต๊ฐ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋งŒ๋“ค๊ณ  ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ updateํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰.

 

โ˜… <BOJ S3 9711 ํ”ผ๋ณด๋‚˜์น˜> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: ์—ญ์‹œ ๋™์ผํ•˜๊ฒŒ O(n)์œผ๋กœ DP technique ํ™œ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ์ฃผ์˜ํ•ด ๋‘ ๊ฐœ์˜ ์ˆ˜๋งŒ ์„ ์–ธํ•ด์„œ updateํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ dp-table update. modular operation property(addition) ํ™œ์šฉํ•˜๋ฉด ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

โ˜… <BOJ S4 15624 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 7> โ˜… [โ‘ก Memoization DP Technique ํ™œ์šฉ]

: ์—ญ์‹œ ๋™์ผํ•˜๊ฒŒ O(n)์œผ๋กœ ํ’€๋ฆผ. modular operation๊ณผ DP ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์œ„ํ•œ ๋‘ ๊ฐœ ๋ณ€์ˆ˜๋งŒ ์„ ์–ธ ํ…Œํฌ๋‹‰ ํ™œ์šฉ

 

โ˜… <BOJ S4 9471 ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ> โ˜… [โ‘ข Pisano Period]

: mod m์ด ์ฃผ์–ด์กŒ์„ ๋•Œ brute-force๋ฅผ ํ™œ์šฉํ•ด ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ k(m)์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ(mod m์ด (1,1)์ด ๋‚˜์˜ฌ ๋•Œ ๋ฉˆ์ถฐ์„œ ์ฃผ๊ธฐ k(m) ๊ตฌํ•˜๊ธฐ)

 

โ˜… <BOJ G2 2749 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 3> โ˜… [โ‘ข Pisano Period์˜ ์„ฑ์งˆ (7) ํ™œ์šฉ]

: ์ตœ๋Œ€ 1000_000_000_000_000_00๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. ๋งค์šฐ ํฐ ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 1_000_000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ ์„ฑ์งˆ, ๊ทธ๋ฆฌ๊ณ  divisor๊ฐ€ 10^k์ด๋ผ๋ฉด Pisano Period pi(n) = 15 x 10^(k-1)์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ(์œ„ ํฌ์ŠคํŒ… ๋‚ด์šฉ โ‘ข์˜ (7))

 

โ˜… <BOJ G2 11444 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 6> / <G2 7677 Fibonacci>โ˜… [โ‘ฃ Power by Divide & Conquer Technique ํ™œ์šฉ]

: ์ตœ๋Œ€ 1_000_000_000_000_000_000๋ฒˆ์งธ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ ํฐ ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. O(N)์ด ์•„๋‹Œ ํ–‰๋ ฌ ๋ถ„ํ• ์ •๋ณต ๊ฑฐ๋“ญ์ œ๊ณฑ์„ ํ™œ์šฉํ•œ O(logN)๋งŒ ํ—ˆ์šฉ.

 

โ˜… <BOJ G1 2086 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ> โ˜… [โ‘ฃ Power by Divide & Conquer Technique + โ‘ค-(1) ํ™œ์šฉ ]

: fibonacci sequence์˜ a๋ฒˆ์งธ ํ•ญ๋ถ€ํ„ฐ b๋ฒˆ์งธ ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. b๋ฒˆ์งธ ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์—์„œ (a-1)๋ฒˆ์งธ ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์„ ๋นผ๋ฉด ๋œ๋‹ค. b==a์ผ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ F(b) ์ถœ๋ ฅ. ์ด ๋•Œ ํ”ผ๋ณด๋‚˜์น˜ ํ•ฉ ๊ณต์‹ ์œ„ โ‘ค-(1) ํ™œ์šฉํ•ด b๋ฒˆ์งธ ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์€ F(b+2)-1, (a-1)๋ฒˆ์งธ ํ•ญ๊นŒ์ง€์˜ ํ•ฉ์€ F(a+1)-1 ์—ฐ์‚ฐ. F(x)๋ฅผ ๊ตฌํ•˜๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logn) ์ดํ•˜์˜ power by divide & conquer ํ™œ์šฉ

 

โ˜… <BOJ G2 11442 ํ™€์ˆ˜๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ> [โ‘ฃ Power by Divide & Conquer Technique + โ‘ค-(2) ํ™œ์šฉ ]

: ์œ„ โ‘ค-(2) ํ™œ์šฉํ•ด n์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ๋Š” F(n+1), ์ง์ˆ˜์ผ ๊ฒฝ์šฐ๋Š” F(n)์„ O(logn)๋งŒ์— ์ถœ๋ ฅ

 

โ˜… <BOJ G2 11443 ์ง์ˆ˜๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ> [โ‘ฃ Power by Divide & Conquer Technique + โ‘ค-(3) ํ™œ์šฉ ]

: ์œ„ โ‘ค-(3) ํ™œ์šฉํ•ด n์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ F(n)-1, ์ง์ˆ˜์ผ ๊ฒฝ์šฐ F(n+1)-1์„ O(logn)๋งŒ์— ์ถœ๋ ฅ(์ด ๋•Œ -1์ด๋ฏ€๋กœ mod ๊ฒฐ๊ณผ ์Œ์ˆ˜ ๋˜๋Š” ๊ฒฝ์šฐ ๊ณ ๋ ค)

 

โ˜… <BOJ P5 11440 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ•ฉ> [โ‘ฃ Power by Divide & Conquer Technique + โ‘ค-(4) ํ™œ์šฉ ]

: ์œ„ โ‘ค-(4) ํ™œ์šฉํ•ด F(n) x F(n+1)์„ ๊ฐ๊ฐ O(logn)๋งŒ์— ์ถœ๋ ฅ

'Computer Science > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐ŸŽข Topology Sort  (3) 2024.10.11
๐Ÿซ‚ Prefix Sum  (1) 2024.09.06
๐Ÿ“ฒ Divide&Conquer  (1) 2024.06.08
๐Ÿš€ Power by Divide and Conquer  (1) 2024.06.06
๐Ÿ›ฃ๏ธ Shortest Path in an Unweighted Graph  (0) 2024.05.23

๋Œ“๊ธ€