해당 내용은 정확하지 않을 수 있습니다. 그래서 당연히 귀한 시간 내주시어 지적해 주시면 감사 드리겠습니다. Red Black Tree란? 자세한 개념 정리는 정리가 잘 되어있는 블로그들이 많아 생략. 1. 자료 구조 중 하나이다. 2. 자가균형이진 탐색 트리이다. 3. 쉬운말로 자료(값)을 삽입하고 삭제하여도 해당 트리는 스스로 균형을 유지한다. -> 이말인 즉, 해당 트리를 탐색 하였을때 아주 효율적인 탐색이 가능하다. Red Black Tree 특징 1. (균형)이진탐색트리 2. 노드는 Rad/Black 중 하나씩만 갖어야 한다. 3. Root노드는 Black이여야 한다. 4. leaf node는 Black이여야 한다. 5. Rad node의 자식노드는 무조건 Black 6. 각 노드는 leaf ..
전체 글
개발 좋아하는 PM 입니다.1. 위 그림은 CPU를 몇가지 구성으로만 그린 그림이다. 2. 예를 들어 c = a+b 에대한 연산을 진행 한다고 가정하고 cpu에서의 아주 간략한 흐름만 보겠다. 3. 입력된 코드가 실행된다. 4. 해당 코드들은 각각의 메모리주소마다 저장된다고 가정한다. 5. 그리고 프로그램 카운터에서 메모리 주소레지스터로 명령이 전달된다. 6. 메모리주소 레지스터는 메모리에서 a라는 값을 가져와 명령어 레지스터로 전달된다. 7. 해당 값은 명령어 데이터로 전달되며 제어장치에서 해석이 된다. 8. b도 이와같이 처리되어 두 값은 누산기 에서 ALU로 들어가 연산된다. 9. 결과적으로 c라는 값을 산출 하게 된다. 배운 점 CPU의 전체적인 흐름을 알게되는 공부였다. 앞으로 더 상세히 알아봐야 할 것 같다.
알고리즘 유형 : DFS 풀이 참고 : https://velog.io/@kimmainsain/C%EC%96%B8%EC%96%B4-%EB%B0%B1%EC%A4%80-14888-%EC%97%B0%EC%82%B0%EC%9E%90-%EB%81%BC%EC%9B%8C%EB%84%A3%EA%B8%B0 문제 링크 : https://www.acmicpc.net/problem/14888 풀이 요약 각 연산종류마다의 주어진 개수만큼 dfs함수를 실행하여 준다. 이때 x라는 변수를 하나씩 더하여 다음과 같은 사항을 체크한다. 1. dfs 깊이 2. arr 리스트의 인덱스 번호 따라서 주어진 연산 개수만큼 계산이 된다. 그리고 max값을 문제에서 주어진 범위의 가장 작은 수로 제한을 두어 비교하며 업데이트 한다. (min값 동..
주요 내용 요약 0. 이분탐색 리스트의 특징 - 두개이하의 자식노드를 갖는 트리이며, 루트보다 작으면 왼쪽, 크면 오른쪽으로 자식을 갖는다. - 따라서 inorder로 순회 하면 오름차순의 데이터를 갖게 된다. 1. 삽입 - 루트부터 key값의 대/소를 배교해 작은면 왼쪽, 크면 오른쪽으로 내려가면서 자리를 찾아 삽입 2. 삭제 - 가장 끝(nil)에 있는 노드를 삭제하면 NULL만 자식으로 붙히면 됨 - 중간에 값을 삭제 한다면 두가지 케이스로 나눠진다. 1) 자식 노드가 모두 있을때. - 오른쪽 자식을 루트로 하여 그 자식들 중 최솟값을 갖는 루트의 데이터를 갖져온 후 삭제. 2) 자식 노드가 하나 이하로 있을때. - 둘중에 있는 놈을 자식으로 할당 3. 입력 값 별 순회 데이터(7, 3, 9, 1,..
중요 부분 1. Struct Node 선언(?) - 참고로 typedef 를 사용하면 편하게 불러올 수 있다. typedef struct NODE { // 노드 선언 struct NODE *next; // 자식 노드 선언 int data; // data 변수 }NODE; 2. 노드 생성 함수 void appendFirst(NODE *target, int newData){ // 첫 번째 노드 생성 NODE *newNode = malloc(sizeof(NODE)); // 첫 노드의 동적메모리 할당 newNode -> next = target -> next; // 헤더 노드의 포인터를 새노드의 포인터로 연결 newNode -> data = newData; // 인자로 받은 데이터를 새노드의 데이터로 할당 ta..
알고리즘 유형 : 백트래킹 풀이 참고 : 없음 문제 링크 : https://www.acmicpc.net/problem/15650 풀이 요약 중복이 없는 배열이 나와야 하므로 for문 에서 i가 인자보다 클때만 재귀를 들어가게 하였다. 코드(python) n, m = map(int, input().split()) arr = [] def dfs(index): if len(arr) == m: print(' '.join(map(str, arr))) for i in range(1, n+1): if i >= index: # 중복을 없에는 재귀 조건 arr.append(i) dfs(i+1) arr.pop() dfs(1) 배운 점, 배울 점 10분도 안걸려서 푼거같다! 기분이가 좋다. 재귀를 많이 다루어 보면서 일반적..