SyntaxHighlighter.all();

1. 팩토리얼 구하기

팩토리얼 알고리즘 : 1부터 n까지 연속한 정수의 곱 구하기

1) 팩토리얼 알고리즘 (재귀없이)

1
2
3
4
5
6
7
8
#1부터 n까지 곱하기
def fact(n):
    f = 1
    for i in range(1,n+1):
        f = f*i
    return f
 
print(fact(10))
cs

 

2) 팩토리얼 알고리즘 (재귀)

재귀 호출 : 어떤 함수 안에서 자기 자신을 부르는 것

1
2
3
4
5
6
7
#1부터 n까지 곱하기
def fact(n):
    if n <=1: #종료조건
        return 1
    return n*fact(n-1)
 
print(fact(10))
cs

 

3) 알고리즘 분석

시간복잡도 = O(n)

 

2. 최대공약수 구하기

최대공약수 : 두 개 이상의 정수의 공통 약수 중에서 가장 큰 값

1) 최대공약수 알고리즘

1
2
3
4
5
6
7
8
9
10
def gcd(a,b):
    i = min(a,b)
    while True:
        if a % i ==0 and b%i==0:
            return i
        i = i-1
 
    
print(gcd(3,6))
 
cs

 

2) 유클리드 알고리즘

유클리드 최대공약수 : 1. a와 b의 최대공약수는 'b'와 'a를 b로 나눈 나머지'의 최대공약수와 같다.

                                     -> gcd(a,b)=gcd(b,a%b)

                             2. 어떤 수와 0의 최대공약수는 자기자신이다.  -> gcd(n,0)=n

1
2
3
4
5
6
7
8
def gcd(a,b):
    if b==0:
        return a
    return gcd(b,a%b)
 
    
print(gcd(3,6))
 
cs

 

3. 하노이의 탑 옮기기

1) 하노이의 탑 알고리즘 

하노이의 탑 알고리즘 : 원반이 n개일 때 n-1개를 다른 기둥에 옮기는 것이 포인트! 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# n = 옮기려는 원반의 개수
# from_pos = 옮길 원반이 현재 있는 출발점 기둥
# to_pos = 원반을 옮길 도착점 기둥
# aux_pos =  보조 기둥
def hanoi(n,from_pos, to_pos, aux_pos): 
    if n==1:
        print(from_pos, "->", to_pos)
        return
    
    hanoi(n-1, from_pos,aux_pos,to_pos) #n-1개의 원반을 보조기둥으로
    print(from_pos,"->",to_pos)
    hanoi(n-1,aux_pos,to_pos,from_pos) #n-1개의 원반을 도착점 기둥으로
 
print("n=1")
hanoi(2,1,3,2)
 
 
cs

 

2) 알고리즘 분석

시간복잡도 = O(2^n)

 


연습문제

4-1. 

1
2
3
4
5
6
def sum(n):
    if n <=1:
        return 1
    return n+sum(n-1)
 
print(sum(10))
cs

 

4-2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#처음에는 a[0]를 max로
#그뒤로 a[1],a[2]....비교하기
def find_max(a,n):
    if n ==1:
        return a[0]        #max값 첫번째 값으로
    max = find_max(a,n-1)
    if max > a[n-1]:
        return max
    else:
        return a[n-1]
 
 
a=[12,13,14,15,2]
print(find_max(a,5))
cs

 

5-1.

1
2
3
4
5
6
7
8
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-2+ fibonacci(n-1)
 
    
print(fibonacci(5))
 
cs

'컴퓨터 과학 > 알고리즘' 카테고리의 다른 글

[알고리즘] 5. 정렬  (1) 2020.06.22
[알고리즘] 4. 탐색  (0) 2020.06.22
[알고리즘] 2. 알고리즘 기초  (0) 2020.06.22
[알고리즘] 1. 알고리즘이란  (0) 2020.06.09

+ Recent posts