목록분류 전체보기 (108)
헬창 개발자
주제 설계 시연 https://www.youtube.com/watch?app=desktop&v=aT1hfK1rxiI 깃허브: https://github.com/gilgagun/Hello-World-
설계도 오른쪽 회전의 알고리즘 루트 노드 n에서 불균형이 발견된다면, n.left를 x로 선언하고 n.left를 x.right로 만들어줘 연결을 끊는다. x.right에 n을 연결해줘 서브트리로 갱신한다. 왼쪽 회전은 방향만 바꿔주면 된다. 코드 class Node: def __init__(self, key, height, left=None, right=None): self.key = key self.height = height self.left = left self.right = right class AVL: def __init__(self): self.root = None def height(self, n): if n == None: return 0 return n.height def put(self..
https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 문제 총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다. 감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다. 각각의 시험장에 총감독관은 오직 1명만 있어야..
브릿지란 단절선, 절단선을 의미하며 그래프가 2개로 나눠지는 간선을 의미한다. 다음과 같은 그래프가 있다. 이 그래프에 단절선은 어떻게 찾을까?? 우리가 필요한 자료구조는 순회 체크 리스트, 현재 정점, 부모 정점, 브리지를 담을 리스트, 우회로 변수, (a, b) = (본인 순번, 주변 최소 순번)이다. 이제 알고리즘을 살펴보자 요약은 다음과 같다. # 자식 노드에서 부모 노드로 역으로는 검사 불가 (a, b)=(순번, 주변 최소 순번)를 비교하여 탐색하고 자식 노드의 b가 부모 노드의 a와 같으면 다른 노드를 통해 부모로 갈 수 있기 때문에 우회로가 있다고 판단하여 브리지가 아니게 되고 자식 노드의 b가 부모 노드의 a 보다 크면 우회로가 없기 때문에 브리지라고 판단한다. 정점 1에서 탐색을 시작한다..
설계도 a 테이블은 밸류값이 들어가 있고 각 값들을 이스크 코드값으로 변환시켜 키값을 만든다. 만든 키값에 테이블 사이즈만큼 나눠줘 진짜 키값을 만들어준다. 이제 키값과 밸류값으로 해시 함수를 통해 테이블에 넣기만 하면 된다. 코드 table_size=13 # 태이블 사이즈 class hash: # 해시 함수 def fx(self, num): self.key = self.find_key(num) self.re_key = [] for i in self.key: self.re_key.append(i % 12) return self.re_key # 이중 해싱 함수 def fx2(self, key): self.re_key = key % 5 return self.re_key #선형 조사법 def hash_lp_a..
import random maxsize=5 # 큐 사이즈 class que: class customer: # 고객 정보 def __init__(self, ids, arrival_time, service_time): self.id = ids self.arrival_time = arrival_time self.service_time = service_time def __init__(self): self.front = 0 self.rear = 0 self.data=[None]*maxsize def isempty(self): return self.front == self.rear def isfull(self): return self.front == (self.rear+1)%maxsize def enque(sel..
설계도 코드 class stack: def __init__(self): self.data= [] #스택 생성 self.cnt =0 def push(self,data): # 삽입 함수 self.data.append(data) self.cnt += 1 def isempty(self): # 공백 체크 return len(self.data)==0 def pop(self): # 삭제 함수 if not self.isempty(): self.cnt -= 1 return self.data.pop() def size(self): return len(self.data) def postfix(self, a): # 후위표기식 변경 self.temp = '' # 후위표기식 저장 for i in a: if i.isdigit():..
설계도 코드 #include #include #include #define MAX_NAME 20 // name 사이즈 정의 #define MAX_NUMBER 40 // number 사이즈 정의 typedef struct list { // 정보 저장 구조체 char name[MAX_NAME]; //이름 char number[MAX_NUMBER]; //전화번호 }list; typedef struct tree { // 노드 구조체 list key; //정보 저장 구조체 struct tree* left; // 링크 struct tree* right; // 링크 }tree; void insert(tree** root, list data) { // 삽입 함수 tree* p = NULL; //부모 노드 tree* t..
설계도 코드 #include #define MAX 5 // 배열의 범위 정의 typedef struct que { // 구조체 정의 int front; // 큐의 첫 요소의 앞을 가리킴 int rear; // 큐의 마지막 요소를 가리킴 int data[MAX]; // 큐 }que; int is_full(que *fx) { // 큐가 가득 찼는지 검사하는 함수 if ((fx->rear+1)%MAX == fx->front) return 1; // front+1의 값과 rear의 값이 같으면 가득참 else 0; } int is_empty(que* fx) { // 큐가 비어있는지 검사하는 함수 if (fx->front == fx->rear) return 1; // front의 값과 rear의 값이 같으면 비어..