분류 전체보기
-
JUNGOL...112일지 2021. 8. 10. 12:10
Intermediate_Coder/분할정복/Tutorial: STL Sort 1 문제 우리는 지금까지 여러가지 정렬법을 배워왔다. 정렬법에는 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 합병 정렬 등이 있다. 하지만 배열을 정렬할 필요가 생길 때마다 위의 방법을 손으로 구현하는 것은 지루한 작업일 뿐더러, 손으로 코딩하다 보니깐 구현 중에 실수할 확률도 높아진다. 여러분들의 코딩능력 향상을 위해 지금까지는 숨겨왔지만, 사실 C++에는 크기 비교가 가능한 형식으로 선언된 배열을 정렬해주는 친절한 함수가 존재한다. 바로 sort()함수이다. 여기에서 크기 비교가 가능한 형식은 int나 double처럼 부등호를 사용하여 대소판별이 가능한 자료형을 뜻한다. 간단하게 예를 들자면, 3 n; int* arr =..
-
이진 검색 트리 구현 및 테스트프로그래밍 기초/알고리즘 2021. 8. 10. 12:06
이진 검색 트리 이진 검색 트리의 특성은 다음과 같다. 각 노드는 서로 다른 키 값을 하나씩 갖는다. 최상위 레벨에 루트가 있으며, 각 노드는 최대 두 개의 자식 노드를 가진다. 노드의 왼쪽 서브 트리의 모든 노드의 값은 항상 노드의 값보다 작다. 노드의 오른쪽 서브 트리의 모든 노드의 값은 항상 노드의 값보다 크다. 이진 검색 트리에서의 검색 특정 키를 가진 노드를 검색하는 방법은 다음과 같다. 이진 검색 트리의 루트 노드에서부터 비교를 시작한다. 주어진 키와 노드의 키를 비교하여 주어진 키가 노드의 키가 같으면 노드를 반환한다. 주어진 키가 노드의 키보다 작으면 왼쪽 서브 트리로 이동하여 다시 비교한다. 주어진 키가 노드의 키보다 크면 오른쪽 서브 트리로 이동하여 다시 비교한다. 위 과정을 노드를 찾..
-
JUNGOL...111일지 2021. 8. 9. 15:31
Intermediate_Coder/분할정복/Tutorial : 퀵정렬(Quick Sort) 문제 [퀵소트(Quick Sort)] 퀵소트는 토니 호어(찰스 엔터니 리처드 호어 - Charles Antony Richard Hoare)가 개발한 알고리즘이다. 원소들간의 비교와 교환을 통하여 정렬하는 비교기반정렬 알고리즘이다. 원소들 중에 같은 값이 있는 경우 정렬후에 이들의 순서가 달라질 수 있어 불안정 정렬에 속한다. ( 3을 피봇으로 하고 전통적인 방법으로 하는 예 51, 52, 3, 2, 1) ( 22를 피봇으로 하고 아래 설명한 방법으로 하는 예 21, 3, 1, 22) N개의 데이터를 정렬할 때, 시간복잡도는 평균 O(N * logN), 최악의 경우 O(N2) 이 소요된다. 매 단계에서 적어도..
-
검색 트리 개요프로그래밍 기초/알고리즘 2021. 8. 9. 15:26
검색 트리 저장된 데이터를 빠른 시간에 검색하기 위해 트리를 사용하는 검색 알고리즘이다. 검색 트리의 요소 레코드 여러 개의 필드로 구성되는 개체의 모든 정보가 저장된 구조 ex) 사람의 레코드: 주민 번호, 이름, 집 주소, 직장 주소, 집 전화번호 등이 포함될 수 있다. 필드 레코드의 각 정보를 나타내는 부분 검색 키(또는 키) 다른 레코드와 중복되지 않고 레코드를 대표할 수 있는 필드 검색 트리의 종류 자식의 수에 따른 분류 이진 검색 트리 최대 두 개의 자식 노드를 가지는 트리 다진 검색 트리 세 개 이상의 자식 노드를 가지는 트리 저장되는 장소에 따른 분류 내부 검색 트리 메인 메모리 내에 모든 데이터가 존재하는 트리 외부 검색 트리 디스크에 저장된 상태로 검색을 진행하는 트리 검색 키가 포함하..
-
JUNGOL...110일지 2021. 8. 6. 14:44
Intermediate_Coder/분할정복/숫자구슬(easy) 문제 N개의 숫자 구슬이 과 같이 막대에 꿰어져 일자로 놓여 있다. 이들 구슬은 막대에서 빼낼수 없고 따라서 바꿀 수 없다. 이 숫자 구슬을 M개의 그룹으로 나누었을 때 각각의 그룹의 합 중 최대값이 최소가 되도록 하려 한다. 예를 들어 세 그룹으로 나눈다고 할 때 와 같이 그룹을 나누면 그룹의 합은 각각 11, 15, 18이 되어 그 중 최대값은 18이 되고, 과 같이 나누면 각 그룹의 합은 각각 17, 12, 15가 되어 그 중 최대값은 17이 된다. 숫자 구슬의 배열이 위와 같을 때는 그룹의 합 중 최대값이 17보다 작게 만들 수는 없다. 각 그룹의 합 중 최대값이 최소가 되도록 M개의 그룹으로 나누었을 때, 그 최대값을 출력하는 프로그..
-
알고리즘...33일지 2021. 8. 6. 11:43
이진 검색 트리 구현 연결 자료구조를 이용하여 이진 검색 트리를 구현한다. BinarySearchTree.h #pragma once #include "../Common.h" /// /// 이진 검색 트리에 사용할 노드 /// struct BinarySearchNode { BinarySearchNode() : data{ 0 }, parent{ nullptr }, left{ nullptr }, right{ nullptr } {} BinarySearchNode(int data) : data{ data }, parent{ nullptr }, left{ nullptr }, right{ nullptr } {} void Clear() { data = 0; parent = nullptr; left = nullptr; ..
-
JUNGOL...109일지 2021. 8. 5. 13:37
Intermediate_Coder/분할정복/숫자구슬(easy) 문제 N개의 숫자 구슬이 과 같이 막대에 꿰어져 일자로 놓여 있다. 이들 구슬은 막대에서 빼낼수 없고 따라서 바꿀 수 없다. 이 숫자 구슬을 M개의 그룹으로 나누었을 때 각각의 그룹의 합 중 최대값이 최소가 되도록 하려 한다. 예를 들어 세 그룹으로 나눈다고 할 때 와 같이 그룹을 나누면 그룹의 합은 각각 11, 15, 18이 되어 그 중 최대값은 18이 되고, 과 같이 나누면 각 그룹의 합은 각각 17, 12, 15가 되어 그 중 최대값은 17이 된다. 숫자 구슬의 배열이 위와 같을 때는 그룹의 합 중 최대값이 17보다 작게 만들 수는 없다. 각 그룹의 합 중 최대값이 최소가 되도록 M개의 그룹으로 나누었을 때, 그 최대값을 출력하는 프로그..
-
알고리즘...32일지 2021. 8. 5. 10:29
이진 검색 트리에서의 삭제 이진 검색 트리서 노드를 삭제할 때에는 다음과 같이 케이스를 나눠서 진행해야 한다. 삭제할 노드에 자식이 없는 경우 삭제할 노드에 자식이 하나 있는 경우 삭제할 노드에 자식이 둘 있는 경우 - 자식이 없는 경우 해당 노드를 바로 삭제한다. - 자식이 하나 있는 경우 해당 노드를 삭제한 뒤 자식 노드를 삭제한 노드의 위치에 놓아준다. - 자식이 둘 있는 경우 해당 노도를 삭제한 뒤 이진 검색 트리의 서브 트리의 조건을 깨지 않는 자식 노드를 골라 삭제한 노드의 위치에 놓아준다. 이때, 서브 트리의 조건을 깨지 않는 조건은 다음과 같다. 오른쪽 자식의 서브 트리에서 가장 작은 값을 가진 노드 왼쪽 자식의 서브 트리에서 가장 큰 값을 가진 노드 ※ 선택된 노드에 자식이 존재하는 경우..