728x90

Computer Science/Data Structure, Algorithm 54

Algorithm] 그리디 알고리즘(Greedy Algorithm)

Greedy Algorithm(그리디 알고리즘;탐욕 알고리즘) 데이터 간 관계를 고려 않고 수행 과정에서 모든 것들을 욕심 내어최솟값 혹은 최댓값을 가진 데이터를 선택한다.이러한 선택을 근시안적인 선택이라고도 하며이러한 선택으로 그리디 알고리즘은 문제의 최적해를 찾는다. 그리디 알고리즘에서 선택이 이뤄지면 번복하지 않고 다른 것을 취하지 않기 때문에알고리즘 자체는 매우 단순하지만, 제한적인 경우에만 이 알고리즘이 유효하게 사용할 수 있다. 대표적인 예가 동전 거슬러주기(Coin Change)문제이니 이를 토대로 알고리즘에 대해서 알아보자. 현실처럼 500원, 100원, 50원, 10원이 있다고 하자.거스름돈 동전의 수가 가장 적은 최적해를 구하고 싶을 때, 그리디 알고리즘으로 해결할 수 있다.그리디 알고..

DataStructure] C++ 이중연결리스트(Double Linked List)

C언어로만 작성했던 것들을 C++로 작성하면서 C++과 자료구조 공부를 동시에 하려고 한다. 지난번에는 C++로 간단한 삽입, 삭제, 출력 기능만 넣은 단일 연결 리스트를 구현했다. 이번에 올리는 글은 이중 연결 리스트(Double Linked List)로, 다음 노드에 대한 포인터만 가지고 있는 단일 연결 리스트와는 달리 이전 노드에 대한 포인터도 가지고 있어, 노드 간의 이동을 양방향으로 할 수 있게 구현하는 자료구조를 뜻한다. #include using namespace std; class Node { friend class List; private: Node* next; Node* prev; int value; Node(Node* n, Node* p, int v) { next = n; prev =..

DataStructure] C++ 연결 리스트(Single Linked List)

2학년 1학기(벌써 작년이다)에 필자는 C언어로 자료구조론을 배운 적이 있다.당시에는 C언어로 모든 것을 작성했었다.자료구조도 복습하고, C++ 연습하는 겸,C++로 자료구조들을 구현하는 시도를 하고 있다.오늘은 그 첫번째 시도로 단일 연결 리스트(혹은 단순 연결 리스트;Single Linked List)를 만들어봤다. head, tail, 중간 삽입이 모두 가능하고,삭제하는 건 head에서만 이뤄지도록 했다.그냥 구현에 초점을 둬서 완벽한 예외처리나, template을 활용하거나 하지는 않았지만,근시일내에 그런 걸 다 집어넣고 다시 한 번 짤 생각이다. (왜 remove만 핫핑크로 하이라이팅되는 거지?...) #include using namespace std; class Node { friend cl..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 4장 - 1

C언어로 쉽게 풀어쓴 자료구조 4장 Exercise 문제들이다. 필자가 학교 다니면서 자료구조론 수업을 들었는데, 과제로 제출했던 것들이고, 난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다. 자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 23번. 두 개의 다항식이 다음과 같이 주어졌다. 이들을 연결 리스트를 이용하여 나타내고 본문의 프로그램을 이용해 두 다항식의 합을 구해보라. 24번. 다항식을 연결 리스트로 표현할 수 있음을 보였다. 다항식이 연결 리스트로 표현되어 있고, p를 다항식을 가리키는 포인터라고 할 때, 어떤 실수 x에 대해 이 다항식의 값을 계산하는 함수 poly_eval을 작성하라. 25번. 다항식이 연결 리스트로 표현되어 있는 경우, 두 개의 다항식을 받아 ..

Jungol] 1394 : 양팔저울

문제 주소 : http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=670&sca=4040 나는 이 문제를 수학적으로 생각해서 풀이를 진행했다. 그래서 문제 풀이에 아쉬움이 남는다.(이게 모범 답안일수도 있겠지만, 또 다른 답안이 있으리라..) 좀 더 특별한 방법이 있다면 차후에 다시 생각하여 올려보도록 하겠다. 나는 이 문제를 풀면서 토너먼트 방식을 사용했다. 물건이 몇개가 되더라도 2개씩만 비교할 수 있다는 양팔저울의 특성 상, N(N>=2)개의 물건 중 가장 질량이 큰 것이 무엇인지 정확히 알아내기 위한 최소한의 시행 횟수는 N-1번이면 된다. 가장 무거운 물건을 찾는 것은 정밀한 측정이 필요가 없기 때문에, A가 무거운지 B가 무거운지에 대한 정..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장

2학년 당시, 과제로 제출했던 내용이다.생능출판에서 나온 'C언어로 쉽게 풀어쓴 자료구조'라는 책의9장 정렬 파트에 있었던 이론적인 문제들을 풀었는데, 그 때 풀었던 자료들이 남아 올린다.골치 아파하는 대학생들을 위해 조금의 참고자료가 되었으면 하지만,이를 그대로 복사 붙여넣기 하는 것은 자기 실력 발전에 전혀 도움되지 않는다는 사실만을 알았으면 좋겠다.

DataStructure] 퀵정렬 정렬 패스마다 high, low 출력

대학교 때 과제로 제출했던 기억이 있다.퀵 정렬을 진행하면서 정렬의 매 패스마다 high, low를 출력하도록 하는 거였다.혹여 자료구조 과제를 하면서 골치 아파할 대학생들을 위해 올려놓는다.생능출판에서 나온 'C언어로 쉽게 풀어쓴 자료 구조(개정판)'라는 책이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include #include #define SWAP(a,b) {int t; t=a; a=b; b=t;}// 배열의 크기int n;void PrintSit(int list[], int high, ..

Algorithm] 정렬 알고리즘 시각자료 동영상

selection sort, insertion sort, quick sort, merge sort, heap sort, radix sort (LSD), radix sort (MSD), std::sort (intro sort), std::stable_sort (adaptive merge sort), shell sort, bubble sort, cocktail shaker sort, gnome sort, bitonic sort and bogo sort 선택정렬, 삽입정렬, 퀵정렬, 합병정렬, 힙정렬, 기수정렬(LSD, MSD),std::sort함수(인트로 정렬 적용), std::stable_sort(합병정렬 적용),쉘 정렬, 거품정렬, 칵테일 정렬, 난쟁이 정렬, Bitonic 정렬, bogo 정렬 시청각을..

728x90