Rad Blog

Archive

피보나치 수열로 본 동적 프로그래밍(Dynamic Programming)

2021-07-07 Algorithm xfrnk2
차례 Memoization Tabluation 공간 최적화 1. Memoization > 특징 재귀함수를 사용한다. 필요한 만큼만, 불필요한 경우는 제외하여 구한다. 필요한 계산을 요구, 필요하지 않은 경우는 요구하지 않응. 단, 최대 재귀호출 깊이에 제한을 받을 수 있음. Code def fib_memo(n, cache): if n < 3: return 1 # 이미 n번째 피보나치를 계산했으면 저장된 값을 바로 리턴한다. if n in cache: return cache[n] cache[n] = fib_memo(n - 1, cache) + fib_memo(n - 2, cache) return cache[n] def fib(n): # n번째 피보나치 수를 담는 사전 fib_cache = {} return fib_memo(n, fib_cache) # test print(fib(10)) print(fib(50)) print(fib(100)) 2. Continue reading

알고리즘 - 팰린드롬 문자열 판별하기(파이썬)

2021-06-24 Algorithm xfrnk2
수강중인 강의로부터 수행한 선수 과제의 일부이다. 예전에 팰린드롬을 판별하는 문제를 가지고 고전했던 기억이 떠올라서 별도의 기록으로 남기면 좋겠다는 생각으로 작성하였다. def is_palindrome(word): pivot = len(word)//2 for i in range(1, pivot+1): if word[pivot-i] != word[pivot+i]: return False return True # 테스트 print(is_palindrome("racecar")) print(is_palindrome("stars")) print(is_palindrome("토마토")) print(is_palindrome("kayak")) print(is_palindrome("hello")) 정렬을 직접 구현해보는 연습을 통해 pivot이라는 개념을 사용하는데 익숙해졌나보다. 비교적 쉬운 편에 속했다.

정렬 알고리즘 - 선택 정렬(Selection Sort)

2020-07-14 Algorithm xfrnk2
선택정렬의 원리와 특징 및 성능에 대해서 정리하는 글이다. <학습 목표> 선택정렬의 원리를 이해한다. 선택정렬의 특징을 파악한다. 선택정렬의 성능을 기억한다. 모든 과정을 설명할 수 있다. 선택정렬을 프로그래밍 언어로 구현할 수 있다. 선택정렬의 원리 비교 연산을 통해 주어진 배열의 최솟값을 탐색 배열의 가장 앞에있는 원소와 최솟값을 교환 나머지 미정렬 부분을 가지고 위의 과정을 반복 선택정렬의 정렬 과정 배열의 크기 = n = 5, 최솟값의 인덱스 = least_index [5, 3, 4, 2, 1] 0번째와 1~4번째값을 비교하여 보다 작은 값의 index를 least_index에 저장한다. Continue reading

정렬 알고리즘 - 버블 정렬(Bubble Sort)

2020-07-10 Algorithm xfrnk2
버블정렬의 원리와 특징 및 성능에 대해서 정리하는 글이다. <학습 목표> 버블정렬의 원리를 이해한다. 버블정렬의 특징을 파악한다. 버블정렬의 성능을 기억한다. 모든 과정을 설명할 수 있다. 버블정렬을 프로그래밍 언어로 구현할 수 있다. 버블정렬의 원리 모든 인접한 값의 비교를 위해 왼쪽 또는 오른쪽에서 시작하여 반대편 끝으로 이동 인접한 두 값을 비교하여 왼쪽 값이 더 큰 경우 자리를 바꾸는 과정을 반복 버블정렬의 정렬 과정 가장 오른쪽 값(최댓값)부터 왼쪽 방향(최솟값 방향)으로 정렬되는 과정을 설명 비교연산의 기준이 되는 시작하는 위치는 가장 끝에서 가장 끝 바로 하나 전의 위치까지, 진행 방향으로 1씩 이동 배열의 크기 = n = 5 Continue reading