본문 바로가기

연습문제

함수 심화 연습문제입니다. 제너레이터를 활용한 데이터 필터링, 피보나치 수열 제너레이터, 실행 시간 측정 데코레이터를 구현합니다.

1. 연습문제

1.1 문제 1

회전초밥집에서 '어'가 나오는 초밥만을 먹어 비용을 계산하는 코드를 완성해주세요. 단, 제너레이터를 만들어야 합니다.

def gen(data):
    pass

def solution(data):
    return sum(gen(data))

solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])

1.2 문제 2

다음과 같이 동작하는 제너레이터 함수 fibonacci(n)를 완성하세요. 주어진 숫자 n까지의 피보나치 수열을 반환합니다.

def fibonacci(n):
    pass

for i in fibonacci(5):
    print(i)

'''
출력
1
1
2
3
5
'''

1.3 문제 3

주어진 함수의 실행 시간을 측정하여 출력하는 데코레이터 time_it를 작성하세요. (힌트: time 모듈의 time() 함수를 사용하세요.)


1.4 정답

1.4.1 문제 1 정답

def gen(data):
    for name, price in data:
        if '어' in name:
            yield price

def solution(data):
    return sum(gen(data))

result = solution([['광어초밥', 1000], ['연어초밥', 2000], ['계란초밥', 3000], ['문어초밥', 4000], ['장어초밥', 5000]])
print(result)  # 12000

1.4.2 문제 2 정답

def fibonacci(n):
    prev = 1
    curr = 1
    count = 0
    while count < n:
        yield prev
        prev, curr = curr, prev + curr
        count += 1

for i in fibonacci(5):
    print(i)

1.4.3 문제 3 정답

import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"실행 시간: {end_time - start_time:.4f}초")
        return result
    return wrapper

@time_it
def calculate_fibonacci(n):
    def fib(n):
        prev = 1
        curr = 1
        count = 0
        while count < n:
            yield prev
            prev, curr = curr, prev + curr
            count += 1

    return list(fib(n))

result = calculate_fibonacci(20)
print(result)