본문 바로가기
728x90

Python38

[자료구조] Double Linked List(양 방향 연결리스트) python class 구현하기 [자료구조] Double Linked List(양 방향 연결리스트) python class 구현하기 살펴볼 주요 개념: 더보기 - 양 방향 연결리스트의 특징 - 양 방향 연결리스트 클래스 구현(Node, Double Linked List) 1. 양 방향 연결리스트의 특징 양 방향 연결리스트는 이중 연결 리스트, 원형 연결 리스트로 나누어 진다. 여기서는 원형 연결 리스트만을 살펴볼 것이다. 양 방향 연결리스트는 tail 노드를 알지 못해도 순차적인 탐색 연산이 필요 없다. 삽입될 앞 뒤의 노드만 알고 있다면, 상수 시간 내에 삽입 또는 삭제 연산이 가능하다. 원형 연결리스트의 맨 앞 노드는 '더미 노드'이다. 원형 연결리스트의 순서를 정확하게 매길 수 없는 특징 때문에, head 노드를 정확하게 설정할 .. 2022. 5. 14.
[자료구조] Singly Linked List(한 방향 연결리스트) class 구현 (python) [자료구조] Singly Linked List(한 방향 연결리스트) class 구현 살펴볼 주요 개념: 더보기 - 한 방향 연결리스트의 클래스 구성(Node, SinglyLinkedList) - 클래스 내부 메소드 한 방향 연결리스트를 파이썬으로 구현하기 위해서는 두 개의 클래스가 필요하다. 노드 클래스를 통해 각 노드를 정의하여 링크로 잇고, 이어진 리스트를 연산에 활용하는 singlyLinkedList 클래스가 필요하다. 아래에서는 두 가지 클래스를 구현해보도록 한다. 1. 한 방향 연결리스트의 클래스(node) class Node: def __init__(self, key = None, value = None): self.key = key self.next = None def __str__(self.. 2022. 5. 14.
[자료구조] Linked List(연결리스트)의 특징 [자료구조] 살펴볼 주요 개념: 더보기 - Linked List의 정의 - 한 방향 연결리스트 vs 양 방향 연결리스트 1. Linked List(연결리스트)의 정의 연결 리스트, 링크드 리스트(linked list)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 여기서 하나의 박스가 노드라고 보면된다. 박스의 옆부분이 링크 부분이며 각 노드 안에는 key값 또는 key값 value값 쌍이 들어간다. 다음 노드를 계속 가리키면서 하나의 줄줄이 소세지 같은 모습을 한다. 연결 리스트의 종류로는 한 방향 연결 리스트, 양 방향.. 2022. 5. 14.
[자료구조] 스택, 큐, 덱 [자료구조] 스택, 큐, 덱 들어가며. 스택, 큐, 덱은 알고리즘이라기 보다는 data를 관리하는 구조라고 할 수 있다. 스택, 큐, 덱을 활용한 알고리즘이 BFS, DFS 등등이 되는 것이다. 비유를 하자면, 우리가 운동할 때 힘(input)을 들여 수축과 이완(자료구조)을 통해 어떤 자세(알고리즘)를 반복 수행해서 근육을 얻고 지방을 태우는(Output) 과정을 수행하는 것에 비유를 할 수 있겠다. 운동은 굽히고 펴는 것부터 시작한다. 이처럼 기본적인 것이 자료구조이며, 이를 잘 알고 이에 대한 특성을 잘 활용할 때 좋은 알고리즘을 통해 뛰어난 프로그램을 만들 수 있는 것이다. 1. 기본적인 개념 더보기 배열(Array) vs 리스트(list) 가장 기본이 되는 순차적(sequential) 자료 구조.. 2022. 4. 27.
[백준] 10816 숫자 카드 2 python 알고리즘 문제 문제 10816. 숫자 카드 2 1. 나의 코드와 발상 과정 (1) 제출 답안 from bisect import bisect_left, bisect_right import sys n = int(input()) num_list = list(map(int, sys.stdin.readline().split())) m = int(input()) find_list = list(map(int, sys.stdin.readline().split())) num_list.sort() def count_by_range(array, left, right): right_index = bisect_right(array, right) left_index = bisect_left(array, left) return right_ind.. 2022. 4. 25.
[백준] 1920 수 찾기 python 알고리즘 문제 문제 1920. 수 찾기 1. 나의 코드와 발상 과정 import sys n = int(input()) num_list = list(map(int, sys.stdin.readline().split())) m = int(input()) find_list = list(map(int, sys.stdin.readline().split())) num_list.sort() def count_by_range(array, target, start, end): if start > end: return 0 mid = (start + end) // 2 if array[mid] == target: return 1 elif array[mid] > target: return(count_by_range(array, target, .. 2022. 4. 25.
728x90