본문 바로가기

Python/Data Structure & Algorithm in Python16

[Python 자료구조] 연결리스트 (Linked List) #자료 구조 정의 #노드 class Node: def __init__(self.item): self.data = item self.next = None #비어있는 연결리스트 class LinkedList: def __init(self) self.nodeCount = 0 self.head = None self.tail = None #연산 정의 (1) 특정 원소 참조 (k번째) #K번째 노드 찾기 #[1][67] -> [2][34] -> [3][58] # 노드의 개수: 3 #Head: 67 #Tail: 58 def getAt(self, pos): if pos self.nodeCount: #pos 번째에 있는 노드를 반환하는 것이 목표 retrun None #pos가 0보다 작거나 노드 개수보다 작으면 없다... 2020. 9. 9.
[Algorithm] 동적계획법(Dynamic programming) - Brute Force, Kadane’s Algorithm #동적계획법(Dynamic programming) - 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법 (wikipedia) - Bottom-Up 적 방법 #동적계획법 예제 - nm선 자르기 #nm의 선을 1m나 2m 자르는 방법의 수 #1m 선의 경우 #[1,1,1] => 1가지 #dy[1]=1 #2m 선의 경우 #[1,1,1],[2] => 2가지 #dy[2]=2 #3m 선의 경우 #[1,1,1] => 1가지 #[1,1,1],[2] => 2가지 #1가지(1m선의 경우) + 2가지(2m선의 경우) = 3가지 #dy[3]=3 #4m 선의 경우 #2가지(2m선의 경우) + 3가지(3m선의 경우) = 5가지 #dy[4]=5 n = int(input()) dy=[0]*(n+1) #배열을 만듦 dy[1]=.. 2020. 9. 6.
[Python 기초] 재귀 알고리즘 (recursive algorithms) #종결조건의 중요성 알아보기 #재귀의 간단한 예시 - 1부터 n까지 sum def sum(n): print(n) if n 2020. 9. 6.
[Python 기초] 탐색 (search) #선형탐색 (Linear Search) def linear_search(L,x): i=0 #index i를 0으로 준다 while i < len(L) and L[i] != x: #i가 L리스트의 길이보다 작고, L의 i번째 원소가 x와 같지 않을때 i += 1 #i를 1씩 증가시켜나간다. #원소가 발견되면 i값을 가지고 loop가 종료하게 될 것이기 때문에 #i가 L리스트의 길이보다 짧으면 리스트 안에서 원소를 발견했다는 의미 if i < len(L): return i #발견된 x를 리턴하고 else: return -1 #그렇지 않으면 -1을 리턴한다. S = [3,8,2,7,6,7,6,10,9] linear_search(S,6) #Out: 4 S = [3,8,2,7,6,7,6,10,9] linear_s.. 2020. 9. 6.
[Python 기초] 정렬 (sort) #알파벳, 숫자 크기 순으로 정렬 L=['abcd','xyz','spam'] sorted(L) #Out: ['abcd', 'spam', 'xyz'] L=[3,7,2,7,1,7] L.sort() L #Out: [1, 2, 3, 7, 7, 7] #lambda : 익명함수 (lambda x,y: x + y)(5, 6) #Out: 11 ▼ 익명 함수 lambda 활용법 더보기 더보기 #map() list(map(lambda x: x ** 2, range(5))) # 파이썬 2 및 파이썬 3 #Out: [0, 1, 4, 9, 16] #reduce() from functools import reduce reduce(lambda x, y: x + y, [0, 1, 2, 3, 4]) #Out: 10 reduce(lam.. 2020. 9. 5.
[Python 기초] 연결리스트 (Linked List) #NODE class Node: #define function called 'Node' def __init__(self, item) : self.val = item #save item in 'val' and this node is the head of linked list self.next = None #'next' means the other node #ADD def add(self, item): cur = self.head while cur.next is not None: #cur.next is not None so goes next cur = cur.next cur.next = Node(item) #since the next is none, generate new node #PRINT def pri.. 2020. 8. 10.