목록ALGOLITHM (5)
Dev log
버블 정렬은 두 인접한 원소를 검사하여 정렬하는 방법입니다. 파이썬으로 구현하자면 아래와 같이 구현할 수 있습니다. def bubble_search(data): for i in range(len(data)): for j in range(len(data)-1): if data[j] > data[j+1]: (data[j],data[j+1]) = (data[j+1],data[j]) print('i=',i,'j=',j,data) print(data) data = [5,4,3,2,1,8,7,10] bubble_search(data) 여기서 버블 정렬을 재귀 함수로 구현한다면 아래와 같이 구현할 수 있습니다. def bubble_search(data): for i in range(len(data)-1): if da..
이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식입니다. data = [ 1, 7, 11 , 12, 14 , 23, 33, 47, 51, 64, 67, 77, 130, 672, 871 위와 같은 데이터가 있을 때, 이진 탐색을 구현하면 아래와 같습니다. def binary_search(in_data, input_num): in_data = sorted(in_data) start_num = 0 end_num = len(in_data) - 1 while start_num input_num: end_num = mid_num - ..
계속해서 재귀 알고리즘에 익숙해지기 위해 알고리즘 단골 문제인 팩토리얼과 최대공약수를 풀어보겠습니다. 재귀 함수가 무엇인지는 저번 포스팅에서 설명했으므로 이번에는 자세한 이야기는 생략하겠습니다. factorial 10!을 구할껀데, 10!을 풀어서 이야기하면 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 이고 , 계산하면 3,628,800 입니다. 구현하면 아래와 같습니다. def factorial2(count): if count > 0: return count * factorial2(count-1) elif count==0: return 1 factorial2(10) 코드 설명을 조금 하자면, 아래와 같습니다. fact(10) 10 * fact(9) 9 * fact(8) 8 * ..
알고리즘 문제를 풀면서 반드시 알아야 할 알고리즘 중 하나는 아마 재귀 알고리즘일거라 생각합니다. 재귀 함수를 사용할 수 있는 곳에서는 재귀 함수를 사용하며 알고리즘을 풀면서 공부를 해야 된답니다. 재귀 함수 재귀 함수는 함수내에서 다시 자신을 호출한 후 그 함수가 끝날때까지 함수 호출 이후의 명령문을 수행하지 않습니다. 즉, "반복문 + 스택구조가 결합된 함수를 재귀함수라고 볼 수 있습니다. 스택 구조가 결합된 함수에 대해서 조금 더 풀어서 이야기해보도록 하겠습니다. 스택구조가 결합되었다는 의미는 먼저 들어간 데이터가 가장 마지막에 나오는 구조, 나중에 들어간 데이터가 가장 먼저 나오는 구조(후입선출) 을 말합니다. 쉬운 예를 들어보겠습니다. def hap(a,b): print(a+b) def gop(..
주 사용언어는 Python이지만, 복습의 의미로 다양한 언어로 알고리즘을 차근차근 풀어볼까 합니다. 오늘은 간단하게 오래전에 습득했지만, 전혀 사용하고 있지 않은 언어인PLSQL을 복습할겸, PLSQL로 간단한 문제를 풀겠습니다. PLSQL로 어떻게 알고리즘을 풀 수 있는가? 를 물어보신다면, PLSQL이 무엇인가? 라는 포스팅이 있으니 참고 하라고 말씀드리고 싶습니다만! 안보실꺼 같으니 다시 한번 설명 드리자면, PLSQL은 비절차적 언어인 SQL + 프로그래밍(if,loop)를 이야기합니다. 즉, 절차적 언어로 만드는 프로그래밍입니다. if문과 loop문을 사용할 수 있습니다. 그렇다면 가장 기본적인 두 수자의 덧셈을 만들어보겠습니다. accept p_num1 prompt '첫번째 숫자를 입력하세요 ..