Algorithm&CodingTest 4

투포인터 알고리즘 구현해보기

투포인터 알고리즘 : 배열의 인덱스를 나타내는 두개의 포인터를 설정하고, 이를 옮겨가면서 내가 원하는 값을 찾는 알고리즘 ex) [1, 5, 4, 6, 4] 에서 연속된 배열의 합이 10인 배열의 인덱스를 모두 찾아라. start : 0, end : 0, array : [1] , sum : 1 / sum이 10보다 작음. end 증가 start : 0, end : 1, array : [1, 5] , sum : 6 / sum이 10보다 작음. end 증가 start : 0, end : 2, array : [1, 5, 4] , sum : 10 / sum이 10 찾음. start 증가 start : 1, end : 2, array : [5, 4] , sum : 9 / sum이 10보다 작음. end 증가 st..

페이지 교체 알고리즘 (FIFO, LRU)

페이지 교체 알고리즘 : 메모리를 효율적으로 사용하기 위해서 어떤 데이터를 메모리에 적재할지 결정하는 알고리즘 FIFO : First In First Out 메모리에 가장 먼저 올라온 페이지를 가장 먼저 교체함. 메모리에 올라오는 순서가 0, 4, 6, 5, 4, 7, 8 이고 메모리의 크기가 3일때, [0] [0, 4] [0, 4, 6] [4, 6, 5] [4, 6, 5] # cache hit [6, 5, 7] [5, 7, 8] 이런식으로 메모리에 적재됨. LRU : Least Recently Used 가장 오랫동안 사용되지 않은 페이지를 먼저 교체. 메모리에 올라오는 순서가 0, 4, 6, 5, 4, 7, 8 이고 메모리의 크기가 3일때, [0] [4, 6] [4, 6, 5] [6, 5, 4] # c..

정렬 알고리즘 구현해보기

선택 정렬 배열에서 최솟값을 찾는다. 최솟값이 배열의 맨 앞 원소보다 작으면 자리를 교체한다. 맨 앞의 원소를 제외하고 반복한다. mylist = [199, 22, 33, 12, 32, 64, 72, 222, 233] def 선택정렬(mylist): min_index = 0 # 최소 인덱스 기본을 0으로 count = 0 # 몇번 반복했는지 for _ in range(len(mylist)): # 배열 길이 만큼 반복 for i in range(count, len(mylist)): # count부터 시작(1번 반복했으면 배열 0번째는 젤 작은 수이니 빼고 시작) if mylist[i] < mylist[min_index]: # 배열의 최솟값 인덱스 찾기 min_index = i mylist[count], m..

스택, 연결리스트 구현해보기

1학년때 c언어로 구현하면서 되게 어렵다고 생각했던 기억이 나네.. 노드 클래스 class Node: def __init__(self, data): self.data = data self.next = None def __str__(self): return str(self.data) def __repr__(self): return str(self.data) 스택 클래스 class Stack: def __init__(self, mylist): self.head = Node(mylist[0]) current = self.head for i in range(1, len(mylist)): if current.next == None: current.next = Node(mylist[i]) current = curr..