Today I Leaned

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. 그리드 1) 그리드의 법칙 최소 한개의 row가 container 안에 배치되어야 합니다. 최소 한개의 column이 row 안에 배치되어야 합니다. row는 항상 container 안에 배치되어야 합니다. row 아래에는 column 단위만 포함할 수 있습니다. (contents 를 넣고자 하는 경우 column 안에 포함시켜야 합니다.) 개별 column 은 항상 row에 직접 연결된 자식 개체여야 합니다. 2) container 부트스트랩의 최상위 오브젝트입니다. 컨테이너 안에 다른 요소들이나 콘텐츠들을 포함할 수 있습니다. 3) column row 안에 직속으로 들어가는 자식요소 입니다. 뷰포트 상에 좌우로 나열되는 규격을 만들어줍니다. 각 column 사이에 생기는 간격을 gutter라고 ..

1. 브라우저의 Workflow 1. Dom Tree 생성 브라우저가 HTML을 전달받으면, 브라우저의 랜더 엔진이 이를 파싱하고 DOM 노드로 이루어진 트리를 생성합니다. 각 노드는 HTML 엘리먼트들과 연관되어 있습니다. 2. Render Tree 생성 외부 CSS 파일과 각 엘리먼트의 inline 스타일을 파싱하고, DOM Tree 의 내용을 올바른 순서로 칠할 수 있도록 랜더 트리를 생성합니다. 3. Layout (reflow) 각 노드들에 스크린 좌표가 주어지고 어디에 나타나야 할지 위치가 주어집니다. 4. Painting 랜더링 된 요소들에 색을 입히는 과정. 트리의 각 노드들을 순회하면서 paint() 메서드를 호출합니다. 위 과정은 점진적인 프로세스지만 더 나은 사용자 경험을 위해 랜더링 ..