본문 바로가기

분류 전체보기232

최장 증가 부분 수열(LIS)-개념 최장 증가 부분 수열 문제는 동적 계획법(DP)로도 풀 수 있는 유명한 알고리즘 문제입니다. 최장 증가 부분 수열 정의 어떤 임의의 수열이 주어질 때, 이 수열에서 몇개의 수들을 제거해서 부분수열을 만들 수 있습니다. 이때 만들어진 부분수열 중 오름차순으로 정렬된 가장 긴 수열을 최장 증가 부분 수열이라고 합니다. 먼저 예시를 들겠습니다. [2,11,4,55,7,9,13,3] 이라는 수열이 있습니다. 이제 이것을 최장 증가 부분 수열로 정리 하겠습니다. 11 제거 [2,4,55,7,9,13,3] 55제거 [2,4,7,9,13,3] 3제거 [2,4,7,9,13] 이렇게 LIS가 나올수 있는데 한 수열 내에서 여러개의 LIS가 나올수 있습니다. 먼저 O(N^2) 알고리즘에 대해서 설명하겠습니다. O(N^2).. 2020. 10. 6.
파이썬 반복과 이터레이터 파이썬 다운 반복문 파이썬 답지 않게 처리하기 먼저 파이썬의 반복문을 C언어나 자바를 사용한 사람들은 다음과 같이 사용하는 것을 확인할 수 있습니다. data = [1,2,3,4,5] i = 0 while i 2020. 9. 22.
파이썬 자료구조(심화)-2 스택(LIFO) 스택은 삽입과 삭제를 LIFO(후입 선출)방식으로 빠르게 처리해 주는 객체 컬렉션 입니다. 삽입과 삭제 작업은 주로 push와 pop으로 진행합니다. 스택이 활용 되는 곳은 런타임 메모리 관리, 트리나 그래프에서 깊이 우선 탐색(DFS)가 있습니다. 이제 파이썬에서 스택을 구현할 수 있는 방식을 살펴보겠습니다. 간단한 내장 스택 방식인 list 이 부분은 전에 list에 대해 설명한 파트가 있어서 URL을 통해 남겨두겠습니다. list 개념 https://hyun-am-coding.tistory.com/entry/Python-List?category=778330 list 시간복잡도 https://hyun-am-coding.tistory.com/entry/Python-list-연산에-따른-.. 2020. 9. 17.
파이썬 자료구조(심화)-1 파이썬 기본적인 자료구조 먼저 기본적으로 앞에서 list, tuple, dict을 설명했습니다. 이제 다른 자료구조와 앞에서 배웠던 자료구조 기반으로 만들어진 라이브러리 자료 구조를 확인하겠습니다. Dict 기반 자료구조 collections.OrderDict 먼저 파이썬 3.6버전 이전에는 dict에 데이터를 삽입해도 순서대로 저장된다는 보장이 없었습니다. 그래서 OrderDict를 사용했는데 요즘 3.6 버전 이후에 dict는 OrderDict의 기능을 가지고 있어서 굳이 OrderDict를 사용 안해도 순서대로 저장이 됩니다. 하지만 만약 키의 순서를 매우 중요하게 여기는 경우 OrderDict로 dict를 선언하는 것을 추천합니다. OrderDict는 키의 삽입 순서를 유지하는 Dict의 서브 클.. 2020. 9. 16.
얕은 복사와 깊은 복사 얕은 복사와 깊은 복사 개요 파이썬의 할당문은 객체의 사본을 만들지 않으며 이름만 연결합니다. 변경할 수 없는 객체의 경우에는 일반적으로 차이가 없습니다. 하지만 만약 변경 가능한 객체 또는 변경 가능한 객체의 컬렉션(collection)을 다룰때면 이러한 객체의 '실체 사본' 또는 '복사본'을 만드는 방법이 필요할 수 있습니다. 이제 파이썬에서 객체를 복사하거나 '복제'하는 방법과 이때 주의할 사항을 몇가지 설명하겠습니다. 먼저 파이썬에 내장된 기본 컬렉션을 복사하는 방법을 보겠습니다. 내장된 기본 컬렉션은 list, set, dict가 있습니다. 이것들은 팩토리 함수에 건내 복사할 수 있습니다. sample_list = list(original_list) sample_dict = dict(origin.. 2020. 9. 16.
*args와 **kwargs *args와 **kwargs를 이용하면 좋은점 먼저 이 두가지를 이용하면 함수가 선택적 인자를 받아들일 수 있으므로 모듈 및 클래스에서 유연한 API를 만들 수 있습니다. 먼저 간단한 함수 하나를 만들겠습니다. def foo(required, *args, **kwargs): print(required) if args: print(f'args 호출 : {args}') if kwargs: print(f'kwargs 호출 : {kwargs}') 함수 앞에는 최소한의 'required'라는 인자 하나를 필요로 하지만 추가 위치 인자와 키워드 매개 변수도 추가로 사용할 수 있습니다. 이제 추가 인자를 사용하여 함수를 호출하면 매개 변수 이름 앞에 * 접두사가 있어서 args가 여분의 위치 인자를 튜플로 수집합니다.. 2020. 9. 14.