
1. 연결형 프로토콜 두 장비가 데이터를 전송하기 전에 논리적 연결을 맺는 프로토콜 이를 위해 장비들은 연결을 어떻게 시작하고, 협상하고, 관리하고, 끊는지를 명시하는 규칙을 따른다. 일반적으로 한 장비가 먼저 연결 맺기를 요청하면 다른 한쪽이 응답하고, 연결을 맺을지, 맺는다면 어떻게 맺을지에 대한 제어 정보를 주고 받는다. 2. 비연결형 프로토콜 장비간에 연결을 맺지 않는 프로토콜. 데이터를 보내고 싶은 장비는 즉시 데이터를 보낸다. 3. 네트워크 메시지 포메팅 메시지들의 공통적인 특성은 전송될 데이터 페이로드를 헤더와 푸터가 감싸고 있는 형태로 구성되어 있다는 점이다. 네트워킹 프로토콜에서 송신된 모든 메시지 데이터는 상위 계층에서 캡슐화된 헤더, 데이터, 푸터를 담고있으며, 이러한 중첩은 하위 계..

# 스택에서 min함수를 통해 O(1)로 최소값 찾기 class Stack: def __init__(self): self.container = list() # 최소값을 담아두기 위한 컨테이너 self.min_container = list() def push(self, data): self.container.append(data) # 최소값 갱신 if not self.min_container or data < self.min_container[-1]: self.min_container.append(data) def pop(self): pop_data = self.container.pop() # 삭제되는 데이터가 최소값이라면 최소값을 갱신 if pop_data == self.min_container[-1]:..

1. 정렬되어 있지 않은 연결리스트에서 중복되는 원소를 제거하기 # 연결리스트를 순회하면서 딕셔너리에 Node의 data를 담아두고 # data 값의 key가 존재하면 노드를 삭제 def remove_duplication1(node): compare_table = {} previous = None while node: if node.data in compare_table: previous.next = node.next else: compare_table[node.data] = 1 previous = node node = node.next # 다른 자료구조를 사용할 수 없는 경우 연결리스트 내에서 두개의 포인터를 사용해서 # 중복되는 원소가 있는지 확인 def remove_duplication2(head)..

두가지 경우에서 중복되는 부분을 합쳐 한번에 계산하는 방식 수정 후(답안지) def one_edit_away(first, second): # 길이 체크 if abs(len(first) - len(second)) > 1: return False # 길이가 다른 문자열 구분 if len(first) > len(second): first, second = second, first index_first = 0 index_second = 0 found_difference = False while index_second < len(second) and index_first < len(first): if first[index_first] != second[index_second]: if found_difference..

1. Base Case로부터 확장하기 n = 1 일 때와 같은 base case에 대한 문제를 해결한 뒤에 거기서부터 한단계씩 문제를 확장해 나가는 방식이다. from copy import copy # 문자열의 모든 순열을 계산하는 알고리즘을 설계하라 # 모든 문자는 문자열 내에서 고유하게 등장한다고 가정 string = ['a', 'b', 'c', 'd'] def find_permutations(_list): # base case if len(_list) == 1: return [_list] last = _list.pop() base_elements = find_permutations(_list) combined_elements = [] for element in base_elements: for j ..

1. 병목현상 아래와 같은 서로 다른 정수로 이루어진 배열에서 두 수의 차이가 k 인 원소 쌍의 갯수를 구할 때 s = [1, 7, 5, 9, 2, 12, 3] k = 2 ret = [] 단순하게 배열의 모든 원소를 훑어가면서 원소 쌍의 차이를 확인할 수도 있지만 repeat_count = len(s) for i in range(repeat_count-1): for j in range(i+1, repeat_count): if abs(s[i] - s[j]) == 2: ret.append((s[i],s[j])) 이렇게 코드를 작성한다면 두번째 반복문을 돌면서 같은 원소를 여러번 찾게되어 O(NlogN) 의 시간이 걸리게 된다. 2. 병목현상 제거 dic = {s[i]:i for i in range(len(s..