본문 바로가기

알고리즘

[백준알고리즘]단계별로 풀어보기 실행 계획 세우기 지난번 가이드에 따라 2주씩 나눠서 알고리즘 문제를 풀어보려고 한다. * BOJ에서 입출력 ~ 분할정복 (소요기간 2주) * BOJ에서 그리디 ~ 완전탐색 ( 소요기간 2주) 위의 가이드대로 해보려고 단계 구성을 보다보니까 두번째 스텝은 현재 단계별 스텝에 있는 구성이랑 달라서 내가 임의로 구성해보았다 소요기간 4주 (단, 직장을 다니는 관계로 매일 보다는 주 4회 이상을 목표로 한다) 시작일 : 5/12 목표종료일 : 6/13 2주(5/12 ~ 5/29) 1 ~ 23 단계 스텝 수행(총 171문제) 5/12(수) - 1단계(11문제) 완료 5/16(일) - 2단계(5문제), 3단계(11문제) 5/17~5/21 : 4단계(3문제),5단계(7문제) / 6단계(3문제), 7단계(10문제) / 8단계(9문제).. 더보기
[자료구조] 스택의 개념과 스택 추상 자료형 스택(Stack) 일반적인 의미 : 물건이 쌓여있는 더미 자료구조에서의 의미 : 자료가 저장된 자료의 더미 LIFO(Last in first out) 후입선출 방식으로 나중에 삽입된 자료가 가장 먼저 나간다. 사용예 1. 시스템 모델링 먼저들어온 자료가 가장 나중에 나가는 방식 2. 알고리즘 수식, 미로찾기 등의 알고리즘에서 사용 자료가 A, B, C 순서대로 삽입되었다고 한다면 C,B,A 순서로 꺼내게 된다 top, 가장 최근에 조회된 자료의 위치에서 자료가 추가되고 삭제되는 것이다! 스택의 3가지 연산 1. 푸시(Push) 값을 Top 위치에 삽입하고, top의 위치가 삽입 된 값의 위치로 변경된다 - overflow(넘침) 현상의 발생 : 지정된 stack의 개수보다 더 많은 양의 정보를 저장하고자.. 더보기
[자료구조] 연결리스트의 응용 - 다항식 다항식 : 계수와 차수로 이루어진 항들의 집합 단순연결 리스트를 이용하면 다항식을 구현할 수 있다 구조체 typeef struct ListNodeType { float coef; //항(term)의 계수 int degree; //항(term)의 차수 struct ListNodeType* pLink; }ListNode; 다항식의 덧셈 다항식 A(x) : 6x⁶ + 4x⁵ + 2x² 다항식 B(x) : 1x⁵ + 2x⁴ + 3x² +4 가장 마지막 노드의 pLink는 null 값을 가리킨다 차수가 높은 순으로 추가 되었다. 다항식의 생성 : 다항식의 항 추가 연산 int addPolyNodeLast(LinkedList *pList, float coef, int degree){ int ret = FALSE, .. 더보기
[자료구조] 연결리스트의 응용 연결리스트 관련 함수 1. 순회 2. 연결 3. 역순 헤더 파일 추가(linkedlistop.h) #ifndef _LINKEDLIST_OP_ #define _LINKEDLIST_OP_ void iterateLinkedList(LinkedList* pList); void concatLinkedList(LinkedList* pListA, LinkedList* pListB); void reverseLinkedList(LinkedList* pList); #endif 리스트 실행 소스(linkedListop.c) 순회함수 iterateLinkedList() void iterateLinkedList(LinkedList* pList){ ListNode* pNode = NULL; int count = 0; if(pLi.. 더보기
[자료구조] 연결리스트의 종류와 특성 연결리스트의 종류 - 단순 연결 리스트(singly Linked List) - 원형 연결 리스트(Circular Linked List) - 이중 연결 리스트(Double Linked List) 연결리스트의 특성 비교 - 이전 노드에 대한 접근 연산 단순 연결 리스트 이전노드를 접근할수 있는 방법이 없음 무조건 가장 처음 노드부터 검색해야함 원형 연결 리스트 계속 가다보면 나의 이전 노드의 값을 찾을 수 있다 이중 연결 리스트 이중으로 연결되어 있기 때문에 바로 이전 노드를 접근 할 수 있다 단순 연결 리스트 LinkedList 구조체 헤더 노드의 사용목적 : 구현의 간편함 #ifndef _LINKEDLIST_ #define _LINKEDLIST_ typedef struct ListNodeType{ int.. 더보기
[자료구조] 연결리스트의 개념과 배열리스트와의 비교 연결리스트(Linked List)란 ?포인터를 이용하여 자료를 끊김 없이 연결되어 순차적으로 저장되는 것. 배열리스트와의 가장 대표적인 차이점배열리스트는 물리적 위치가 순차적이지만 ,연결리스트는 단순히 논리적 위치만 순차적이고 물리적 위치는 순차적이지 않을 수 있다는 것! 즉, 최대 원소 개수를 지정하는 것에 대한 차이가 있다.배열리스트는 무조건 최대 원소 개수를 지정해야하지만 연결리스트는 지정해줄 필요가 없다. 연결리스트의 구조노드(Node) = 자료 + 링크 연결리스트의 노드 추가와 제거는 링크 정보를 추가하거나 제거하는 것 배열리스트는 원소의 추가와 제거가 원소의 이동을 의미한다.노드 추가하기 노드 추가시 기존에 연결되어있던 링크를 제거하고 새로운 링크를 추가하여 다시 잇는다노드 제거하기 노드 제거.. 더보기
[자료구조] 배열리스트의 특징과 원소 추가 제거 방법 - 배열리스트(ArrayList) 논리적 (저장)순서와 물리적 저장 순서가 동일하다 원소의 위치 인덱스는 0부터 시작한다 (C배열에서와 동일) 배열리스트의 단점 원소의 개수가 10만개인 배열리스트에서 원소의 추가/제거가 빈번하게 발생한다면? 중간에 추가 제거가 일어날때 해당 데이터와 관계없는 데이터들의 이동이 필요하다 배열리스트의 원소 추가 추가전 시작 지점과 방향, 어디까지 의 3가지 점을 주의해야함 1의 위치에 5를 삽입하기위해 가장 뒤에 있는값을 하나씩 옮긴 후 새로운 데이터를 삽입한다 추가가능한 위치인지 확인 필요 newElementCount 개수 만큼 값을 추가로 저장할 수 있음 int addALElement(ArrayList* pList , int position, ArrayListNode e.. 더보기
[자료구조] 리스트의 개념, 리스트 사용을 위한 추상자료형 리스트(List) : 자료를 순서대로 저장하는 자료구조 구조가 매우 단순 여러 개의 자료가 일직선으로 서로 연결된 선형 구조 선형구조 - 자료가 1:1 관계인것. 리스트의 구현 배열리스트(Array List) C언어에서 제공하는 배열(array)을 이용하여 구현된 리스트 배열 vs. 배열리스트 배열 : 같은 자료형의 데이터가 메모리 상에 연속적으로 저장되는 것 배열리스트 : 자료가 일직선으로 서로 연결 배열리스트는 배열과 달리 서로 연결되어있어야 하기 때문에 중간에 자료를 제거하거나 추가할때 고려해야할 사항들이 있음 끊기지 않도록 자료를 서로 연결시켜주어야함 중간에 자료를 추가할 경우에는 두ㅣ의 자료들을 한칸씩 뒤로 이동시켜줘야함 연결리스트(Linked List) - 포인터를 이용한 구현 리스트 사용 예.. 더보기