반응형

컴퓨터 과학 Computer Science/알고리즘 Algorithm 3

피보나치 수Fibonacci numbers와 메모이제이션memoization

Q. 메모이제이션이란? 글자 그대로 해석하면 ‘메모리에 넣기’라는 의미. 출처. 위키백과 피보나치 구현 예 def fib(n): if n == 1 or n == 2: return 1 return fib(n-1) + fib(n-2) fib(10) 실행결과는 55이다. 메모이제이션을 활용해서 피보나치 구현 예 memo = {} memo[1] = 1 memo[2] = 1 def fib(n): if n not in memo: memo[n] = fib(n-1) + fib(n-2) return memo[n] fib(10) 똑같이 실행결과는 55이다. 속도차이를 비교해보자. 그냥 구현한 경우 50을 구하는데 얼마나 걸릴까. 끝나지를 않는다. 계속 돌고 있다. 메모이제이션을 활용한 경우 금방 끝난다. 이미 구한 경우는..

Q. 구구단을 반복문을 사용하지 않고 구현할 수 있을까?

A. 구현할 수 있다. 재귀함수를 활용해서. 재귀함수로 구현한 구구단 예. max_number1 = 9 max_number2 = 9 def get_multiplaction(number1, number2): print(f'{number1} X {number2} = {number1*number2}') if number2 < max_number2: return get_multiplaction(number1, number2 + 1) else: number2 = 1 print() if number1 < max_number1: return get_multiplaction(number1 + 1, number2) get_multiplaction(2, 1) 클래스로 구현한 예

소수 목록 구하기와 에라토스테네스의 체

소수 목록 구하기 소수는 약수가 1과 자기 자신뿐인 수를 말한다. 그래서 소수는 2, 3, 5, 7 등이다. 4는 약수가 1, 2, 4라 소수가 아니다. 10까지 소수를 구하라는 문제가 있을 때, 가장 쉽게 떠오르는 방식은 소수의 정의대로 2부터 시작해서 자기 자신보다 작은 수까지 쭉 나눠보는 거다. 2는 소수 3은 2까지 나눠서 안 떨어지니 소수! 4는 2부터 나눠서, 2로 바로 나눠떨어지니 중지. 5는 2부터 4까지 나눠서 안 떨어지니 소수! 이렇게 구현하면? 코딩 테스트에서 시간초과로 떨어진다. 너무 오래 걸리니까. 이럴 때 검색이 필요하다. 소수 구하기를 검색하다보면 에라토스테네스의 체가 나온다. 에라토스테네스의 체란? 고대 그리스 수학자 에라토스테네스가 발견한 소수를 찾는 방법이다. (출처: 위..

반응형