본문 바로가기

Algorithm (알고리즘)

프로그래머스 코딩테스트 연습 - 프린터 LV2: (C++) 1.문제 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알.. 더보기
C++ 배열로 구현한 최대 힙 (Array MaxHeap C++ ) 배열로 구현한 최대힙 구현의 편의상 1번째 인덱스부터 사용함, 삭제된 인덱스 값은 0 maxheap:: 자식관계와 상관없이 부모노드가 자식노드보다 큰 구조 (완전 이진트리) 힙생성(heapify)의 시간복잡도:: O(logN) 트리의 높이에 따라 /* 자료구조 최대힙 구현(배열) - 2019/12/29 xtar.tistory */ #include using namespace std; //최대힙 메소드 void Make_MaxHeap(int arr[],int size) { int cnt = 0; for (int i = 0; i < size; i++) { int child = i; int parent = child / 2; while (arr[parent]1) { auto a = arr[parent]; ar.. 더보기
C++ 스택을 이용한 트리 전위순회 (Tree C++ with Stack) 재귀함수를 사용하지 않고 STL 스택으로 트리 전위 순회하기 *재귀함수의 이해 /* 자료구조 이진트리 스택으로 구현 (재귀 사용 x) - 2019/12/29 xtar.tistory */ #include #include using namespace std; template class Node { T vaule; Node* left; Node* right; Node* root; public: Node() : vaule(0), left(nullptr), right(nullptr), root(nullptr) {}; Node(T _value) :vaule(_value), right(nullptr), root(nullptr) {}; Node(T _value, Node* _left, Node* _right) : va.. 더보기
C++ 이진 탐색 트리 구현 ( Binary Search Tree C++) bst 트리:: 루트노드의 왼쪽노드는 루트노드 보다 작은 값 오른쪽노드는 루트노드 보다 큰 값으로 정렬 삽입,삭제,검색의 시간복잡도:: 평균 O(logN) , 최악 O(N) /* BST(Binary Search Tree) 이진탐색트리 구현 - 2019/12/28 xtar.tistory */ #include using namespace std; template struct Node { Node* left; Node* right; T value; }; template class BinarySearchTree { public: BinarySearchTree() :root(nullptr) {}; ~BinarySearchTree() {}; void AddNode(T _value); bool SearchValue(.. 더보기
C++ 포인터를 이용한 트리 구현 (Pointer Binary Tree C++) 정렬되지 않은 일반적인 이진트리 구현한 함수(다형성을 위해 템플릿 사용) void Preorder(Node* node); 전위 순회:: root->left->rigth 순서대로 출력 void Inorder(Node* node); 중위 순회:: left->root->rigth 순서대로 출력 void Postorder(Node* node); 후위 순회:: left->right->root 순서대로 출력 void SetLeft(Node* node); 왼쪽자식 노드에 node 연걸 void SetRight(Node* node); 오른쪽자식 노드에 node 연결 /* 포인터를 이용해 실제 사용되는 자료구조 이진트리 동일하게 구현 - 2019/12/24 xtar.tistory */ #include using name.. 더보기
C++ 링크드 리스트를 이용한 큐 구현 (Single Linked List Queue C++) FILO(LILO)구조 구현한 함수(다형성을 위해 템플릿 사용) void Enqueue(T _value); T Dequeue(); 가장 먼져 들어간 값을 반환하고 큐에서 지움 bool empty(); 비어있는지 확인하는 함수 /* 싱글링크드 리스트를 이용해 실제 사용되는 자료구조 큐와 동일하게 구현 - 2019/12/23 xtar.tistory */ #include using namespace std; template class Node { public: T value; Node* next; Node() :value(0), next(nullptr) {}; ~Node() {}; }; template class Queue { public: Queue() :head(nullptr), tail(nullptr),.. 더보기
C++ 링크드 리스트를 이용한 스택 구현 (Single Linked List Stack C++) LIFO(FILO) 구조 STL의 STACK의 지원 함수:: PUSH- 스택에 값을 넣음 POP- 최근에 넣은 값을 리턴하고 삭제 TOP- 가장 최근값을 리턴 EMPTY - STACK이 비어있다면 TRUE 출력 /* 싱글링크드 리스트를 이용해 실제 사용되는 stl(standard template library) 스택과 동일하게 구현 - 2019/05/18 xtar.tistory */ #include using namespace std; template class Node { public: T value; Node* next = nullptr; Node() {}; ~Node() {}; }; template class Stack { private: Node* head; Node* tail; public: S.. 더보기
C++ 싱글 링크드 리스트 구현 (Singly Linked List C++) 싱글 링크드 리스트는 단일 방향으로 한 노드는 값과 다음 노드를 가리키는 주소를 가지고 있다. 싱글 링크드의 제일 앞에 있는 값을 Front 또는 Head라고 함 싱글 링크드의 제일 뒤에 있는 값을 Back 또는 Tail이라고 함 node->value 현재의 노드가 저장한 값 node->next 다음 노드를 가리키는 주소 싱글 링크드 리스트에서 노드가 삭제될 때 전 노드는 삭제되는 노드의 다음 값만 가리키면 된다. 그 후 삭제될 노드는 delete를 이용해 동적 할당을 해제해 준다. 싱글 링크드 리스트에서 노드가 중간에 삽입될떄 새로 들어오는 노드는 기존에 있던 자리의 노드가 가리킨 앞의 노드를 가리키고 기존의 노드는 새로 들어온 노드를 가리키면 된다. (빨간색: 새로운 노드, 파란색: 기존 노드, 초록.. 더보기
프로그래머스 코딩테스트 연습 - 예산 LV1: (C++) 1.문제 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원해 줄 수 있는지 return 하도록 solution 함수를 완성해주세요. 2.입력 d budget re.. 더보기
백준 1193번: 분수찾기 (C++) 1.문제무한히 큰 배열에 다음과 같이 분수들이 적혀있다.1/11/21/31/41/5…2/12/22/32/4……3/13/23/3………4/14/2…………5/1……………………………이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 2.입력첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 3.출력 첫째 줄에 분수를 출력한다. 소스코드#include using namespace std; int main() { int numerator=0; //분자 int denominator=0; //분모 int inputNu.. 더보기