๐Ÿ˜ฅ ๋ฐฑ์ค€ 1003 : ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜

3Juhwanยท2021๋…„ 2์›” 19์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
3/23

1003: ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜

solved.ac์˜ CLASS 3 ๋ฌธ์ œ๋ฅผ ์ฒจ ๊ฑด๋“ค์—ฌ๋ดค๋‹ค..!


๐Ÿ“Œ Try 1

import sys

def sumEach(x, y):
    return x[0]+y[0], x[1]+y[1]

def fibonacci(n, cnt0, cnt1): 
    if n == 0: 
        return cnt0+1, cnt1
    if n == 1: 
        return cnt0, cnt1+1
    else: 
        return sumEach(fibonacci(n-1, cnt0, cnt1), fibonacci(n-2, cnt0, cnt1))

N = int(sys.stdin.readline().rstrip())
cnt0, cnt1 = 0, 0

for _ in range(N): 
    print(*fibonacci(int(sys.stdin.readline().rstrip()), cnt0, cnt1))

ํ”ผ๋ณด๋‚˜์น˜๋Š” ์›Œ๋‚™ ๋งŽ์ด ํ•ด๋ดค์œผ๋‹ˆ๊นŒ,,, ์–•๋ณด๊ณ  ๊ท€์ฐฎ์•„์„œ ๋ง‰ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ ๋– ๋ฒ„๋ ธ๋‹ค..


๐Ÿ“Œ Try 2

import sys

def fibonacci(n, arr):
    if n == 0:
        arr.append(0);
    elif n == 1:
        arr.append(1)
    else:
        fibonacci(n-1, arr)
        fibonacci(n-2, arr)

N = int(sys.stdin.readline().rstrip())

for _ in range(N):
    arr, i = [], int(sys.stdin.readline().rstrip())
    fibonacci(i, arr)
    print(arr.count(0), arr.count(1))

list์— ๋„ฃ์–ด์„œ ๊ฐฏ์ˆ˜ ์„ธ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ,,, ์—ฌ์ „ํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ ๋–ด๋‹ค.
์žฌ๊ท€๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋„ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ, list์˜ countํ•จ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์—ญ์‹œ O(n)์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.


๐Ÿ“Œ Try 3

import sys

def fibonacci(n, arr):
    if n == 0:
        arr[0] += 1
    elif n == 1:
        arr[1] += 1
    else:
        fibonacci(n-1, arr)
        fibonacci(n-2, arr)

N = int(sys.stdin.readline().rstrip())

for _ in range(N):
    i = int(sys.stdin.readline().rstrip())
    arr = {0 : 0, 1 : 0}
    fibonacci(i, arr)
    print(arr[0], arr[1])

list๊ฐ€ ์•„๋‹Œ dict๋ฅผ ์‚ฌ์šฉํ•ด์„œ countํ•จ์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ๋ดค๋Š”๋ฐ, ๊ทธ๋ž˜๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œฌ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” 2^(n/2)๋กœ O(2^n)๋ผ๊ณ  ํ•œ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ‘ผ๋‹ค๋ฉด O(n)์œผ๋กœ ์ค„๊ธด ํ•˜์ง€๋งŒ,
์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋Š” ํ’€์ง€ ๋ชปํ•˜๊ฒ ๋‹ค.


๐ŸŽฏ Solution

import sys

def fibonacci(n):
    zero, one, tmp = 1, 0, 0
    
    for _ in range(n):
        zero, one = one, one + zero
        
    print(zero, one)
    
    
N = int(sys.stdin.readline().rstrip())

for _ in range(N):
    i = int(sys.stdin.readline().rstrip())
    fibonacci(i)

์žฌ๊ท€๋ก  ํ’€์ง€ ๋ชปํ•˜๊ณ  ๋ฐฉ๋ฒ•์€ ๋ฐ˜๋ณต๋ฌธ ๊ฐ™์•˜๋‹ค.
๋„์ €ํžˆ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ’€์ง€ ๋ชปํ•ด์„œ, ๋‹ค๋ฅธ ๋ถ„์˜ ํ’€์ด๋ฅผ ๋ดค๋‹ค.

๊ฐ ์ˆซ์ž๋งˆ๋‹ค 0๊ณผ 1์˜ ์ถœํ˜„๋นˆ๋„ ์—ญ์‹œ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ์—ˆ๋‹ค.

์œ„์˜ ๊ทœ์น™๋งŒ ์•Œ๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค,,,


๐ŸŽ Reference

profile
Codeforces์™€ USACO ํ’€์ด๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€๋„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€