-
[λ°±μ€] 1788 νΌλ³΄λμΉμμ νμ₯ with PythonPS 2022. 3. 6. 21:35728x90λ°μν
π BOJ 1788 νΌλ³΄λμΉμμ νμ₯
π‘ 쑰건
νΌλ³΄λμΉ μ F(n)μ nμ΄ μμμΈ κ²½μ°λ‘λ νμ₯μν¬ μ μλ€.
F(n) = F(n-1) + F(n-2)λ₯Ό n β€ 1μΌ λλ μ±λ¦½λλλ‘ μ μνλ κ²μ΄λ€.
n = 1μΌ λ F(1) = F(0) + F(-1)μ΄ μ±λ¦½λμ΄μΌ νλ―λ‘, F(-1)μ 1μ΄ λμ΄μΌ νλ€.
nμ΄ μ£Όμ΄μ‘μ λ, νΌλ³΄λμΉ μ F(n)μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νλ νλ‘κ·Έλ¨.
nμ μμλ‘ μ£Όμ΄μ§ μλ μλ€.nμ μ λκ°μ΄ 1,000,000μ λμ§ μλ μ μμ΄λ€.
첫째 μ€μ F(n)μ΄ μμμ΄λ©΄ 1, 0μ΄λ©΄ 0, μμμ΄λ©΄ -1μ μΆλ ₯νλ€.
λμ§Έ μ€μλ F(n)μ μ λκ°μ μΆλ ₯νλ€.
μ΄ μκ° μΆ©λΆν μ»€μ§ μ μμΌλ―λ‘, μ λκ°μ 1,000,000,000μΌλ‘ λλ λλ¨Έμ§λ₯Ό μΆλ ₯νλ€.λ€μ΄λλ―Ήνλ‘κ·Έλλ° μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin fibo = [0 for _ in range(1500000)] n = int(stdin.readline()) fibo[0:1] = [0, 1] if n < 0: for i in range(-1, n - 1, -1): data = fibo[i+2] - fibo[i+1] if data < 0: fibo[i] = (abs(data) % 1000000000) * -1 else: fibo[i] = data % 1000000000 if fibo[n] < 0: print(-1) print(fibo[n] * -1) else: print(1) print(fibo[n]) elif n > 0: for i in range(2, n + 1): fibo[i] = (fibo[i - 1] + fibo[i - 2]) % 1000000000 print(1) print(fibo[n]) else: print(0) print(0)
π μμ λ° μ€νκ²°κ³Ό
μμ
10
μ€νκ²°κ³Ό
1 55
β¨οΈ λ¬Έμ νμ΄
νΌλ³΄λμΉ κ°μ μ μ₯ν fibo 리μ€νΈ ν¬κΈ°λ₯Ό 150λ§ κ°λ‘ λ§λ€μ΄μ€λ€.
리μ€νΈμ 첫λ²μ§Έ κ°κ³Ό λλ²μ§Έ κ°μ 0 κ³Ό 1λ‘ μ μ₯νλ€.n μ΄ 0λ³΄λ€ μμ κ²½μ°, -1λΆν° nκΉμ§ -1μ© μ€μ¬κ°λ©΄μ μννλ€.
fibo[i + 2] - fibo[i + 1] μ μ νμμ ν΅ν κ°μ΄ 0 λ³΄λ€ μμ κ²½μ°
fibo[i]μ κ°μ fibo[i + 2] - fibo[i + 1] λ₯Ό μ λκ° μ²λ¦¬ν΄ μ€ ν, 1000000000λ‘ λλκ³ λ€μ μμλ‘ λ§λ€μ΄μ€λ€.fibo[n] < 0 μΌ κ²½μ°, -1 μ μΆλ ₯νκ³ , fibo[n]λ₯Ό μμλ‘ λ³ννμ¬ μΆλ ₯νλ€.
fibo[n] >= 0 μΌ κ²½μ°, 1 μ μΆλ ₯νκ³ , fibo[n]μ μΆλ ₯νλ€.
n > 0 κ²½μ°, μΌλ° νΌλ³΄λμΉμ²λΌ μλ₯Ό ꡬνλ€.
n = 0 κ²½μ°, 0μ μΆλ ₯νλ€.
πΎ λλμ
- μμλ‘ νΌλ³΄λμΉλ₯Ό νμ₯νλ κ²μ΄ μκ°λ³΄λ€ μ‘°κΈ κΉλ€λ‘μ΄ λλμ΄ μμμ΅λλ€.
λ°μν'PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 4811 μμ½ with Python (0) 2022.03.09 [λ°±μ€] 1822 μ°¨μ§ν© with Python (0) 2022.03.06 [λ°±μ€] 1660 μΊ‘ν΄ μ΄λ€μ with Python (0) 2022.03.06 [λ°±μ€] 1755 μ«μλμ΄ with Python (0) 2022.03.06 [λ°±μ€] 16935 λ°°μ΄ λ리기 3 with Python (0) 2022.03.04