개인공부/알고리즘

알고리즘 문제 풀이(재귀호출(하노이의 탑), 순차 탐색, 선택 정렬, 삽입정렬)

lsc99 2023. 10. 1. 19:12

재귀호출 (하노이의 탑)

# 6번 문제 (하노이의 탑)
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)
    
    print(from_pos, "->", to_pos)
    
    hanoi(n-1, aux_pos, to_pos, from_pos)

 

print('n = 1')
hanoi(1, 1, 3, 2)
print('n = 2')
hanoi(2, 1, 3, 2)
print('n = 3')
hanoi(3, 1, 3, 2)

순차 탐색

# 7번 문제 (순차 탐색)
def search_list(a, x):
    n = len(a)
    
    for i in range(0, n):
        if x == a[i]:
            return i
        
    return -1
            
v = [17, 92, 18, 33, 58, 7, 33, 42]

 

search_list(v, 33)

 

# 7-1번 문제 (순차 탐색 - 모든 위치 리스트로 돌려주기)
def search_list_all_index(a, x):
    n = len(a)
    result_list = []
    for i in range(0, n):
        if x == a[i]:
            result_list.append(i)
        
    return result_list
            
v = [17, 92, 18, 33, 58, 7, 33, 42]

# 7-2번 문제 계산복잡도 -> O(n)

 

search_list_all_index(v, 33)

 

# 7-3번 문제
def stu_match(input_num):
    stu_no = [39, 14, 67, 105]
    stu_name = ['Justin', 'John', 'Mike', 'Summer']
    
    for i in range(0, len(stu_no)):
        if stu_no[i] == input_num:
            index_num = i
    
    return stu_name[index_num]

 

stu_match(39)

선택 정렬 알고리즘

# 8번 문제 - 선택 정렬 알고리즘 (O**2)
def sel_sort(a):
    n = len(a)
    for i in range(0, n-1):
        min_idx = i
        for j in range(i + 1, n):
            if a[j] < a[min_idx]: # 8-2번 문제 바꾸는 부분 -> 'a[j] < a[min_idx]' : 작은 수에서 큰 수, 'a[j] > a[min_idx]' : 큰 수에서 작은 수
                min_idx = j
        a[i], a[min_idx] = a[min_idx], a[i]

 

list = [2, 4, 5, 1, 3]
sel_sort(list)
print(list)

삽입 정렬 알고리즘

# 9번 문제 - 삽입 정렬 알고리즘
def ins_sort(a):
    n = len(a)

    for i in range(1, n):
        key = a[i]
        j = i - 1
        while j >= 0 and a[j] > key: # 9-2번 문제 바꾸는 부분 -> 'a[j] > key' : 작은 수에서 큰 수, 'a[j] < key' : 큰 수에서 작은 수
            a[j + 1] = a[j]
            j -= 1

        a[j + 1] = key

 

d = [2, 4, 5, 1, 3]
ins_sort(d)
print(d)