# DFS 함수 정의 def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v] = True print(v, end=' ') #방문된거 먼저 출력 # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: #인접된 노드가 방문되지 않았다면 dfs(graph, i, visited) # 각 노드가 연결된 정보를 인접리스트 자료형으로 표현(2차원 리스트) graph = [ [], #인덱스 0 비워둠 [2, 3, 8], #1번부터 시작 1번 노드가 2,3,8과 인접함 [1, 7], # 2는 1,7과 인접 [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7] ] # 각 노드가 방문..
구현머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정->풀이를 떠오르는것은 쉽지만 소스코드로 옮기기 어려운 문제 -알고리즘은 간단한 코드가 지나칠 만큼 길어지는 문제-실수 연산을 다루고, 특정 소수점 자리까지 출력-문자열을 특정한 기준에 따라 끊어 처리-적절한 라이브러리를 찾아 사용(순열,조합) 2차원 공간에서의 처리다양한 시뮬레이션 공간 : 한 좌표에 존재하는 캐릭터가 반복적으로 어떤 위치로 이동한다. 어떤방향으로 이동할지 적을 수 있다.dx =[0] ->행은 가만히 있고dy =[1] ->열을 기준으로 하나 증가 ==오른쪽으로 이동 1.상하좌우2차원 행렬의 인덱스느 (0,0)으로 시작한다.하지만 문제에서 (1,1)으로 출발한다고 하면가장 첫번째 인덱스 사용하지 않는 방법 or (1,1)을 (0,0..
탐색 많은 데이터 중에서 원하는 데이터를 찾는 과정 특정 조건에 맞는 데이터 존재하는지 만약 존재한다면 어떤 위치에 존재하는지 찾는다. 스택 먼저 들어온 데이터가 나중에 나가는 선입후출 큐 먼저 들어온 데이터가 먼저 나가는 선입선출 재귀 함수(Recursive) - 자기 자신을 다시 호출 - 잘 활용하면 복잡한 알고리즘을 간결하게 작성할 수 있다. - 함수가 실행시 함수들의 정보가 스택프레임에 쌓여서 메모리에 올라감. ->컴퓨터 구조 측면에서 보았을 때, 스택 자료구조와 동일 그래서 스택 라이브러리 대신 재귀함수 이용하는 경우 많다. - 문제 풀이에서 사용할 때는 재귀 함수의 종료 조건을 반드시 명시 -> 명시하지 않으면 함수 무한 호출 - 모든 재귀 함수는 반복문을 이용하여 동일한 기능을 구현할 수 있..
현재 상황에서 지금 당장 좋은 것만 고르는 방법으로 그리디 알고리즘은 가장 큰 값만 고른다. (탐욕법) 1.거스름돈 1. 최적의 해를 빠르게 구하기 위해서는 가장 큰 화폐 단위부터 돈을 거슬러 준다. -> 동전 중 큰 단위가 항상 작은 단위의 배수이므로 작은 단위들의 동전을 종합해 다른 해가 나올 수 없다. 큰 단위가 작은 단위의 배수가 아니라면 최적의 해가 나오지 않는다. 2. n원을 거슬러 줘야 할때, 가장 먼저 500원으로 거슬러 줄 수 있을 만큼 거슬러 준다. (이후 100, 50, 10원~) n = 1260 #거슬러줄 돈 count = 0 # 큰 단위의 화폐부터 차례대로 확인하기 (리스트에 담기) coin_types = [500, 100, 50, 10] for coin in coin_types:..
Source Code#include /* 8 / \ 3 10 / \ \ 2 5 14 / \ 11 16*///최대 노드 수를 저장할 변수int MAX_node = 16;// 트리를 저장할 배열//tree[0]에는 노드갯수를 삽입한다.//tree에서 빈부분은 -1로 표현한다.int tree[] = { 8, 8, 3, 18, 2, -1, -1, 21, -1, -1, -1, -1, -1, -1, 11, -1 };//노드의 왼쪽 자식 노드//배열 tree의 원소들을 반환하므로 반환값 int , tree의 인덱스의 값을 매개변수로 받아야 하므로 int index라 작성int get_left_child(int index){ // 노드가 n..
Source Code#include #include #define STACK_SIZE 100typedef int element; // 스택 원소(element)의 자료형을 int로 정의 typedef struct stack{ element stack[STACK_SIZE]; // 1차원 배열 스택 선언 int top; // top 초기화}StackType;// 스택이 공백 상태인지 확인하는 연산int isEmpty(StackType* s){ if (s->top == -1) //이게 스택이 공백인 조건 //1부터 시작하는 스택이면 top이==0일때 공백 return 1; else return 0;}// 스택이 포화 상태인지 확인하는 연산int isFull(Stack..
Source Code#include #include #include // 이중 연결 리스트의 노드 구조를 구조체로 정의typedef struct listNode{ char name[50]; // 이름 저장 char phone[50];// 전화번호 저장 struct listNode* llink; // 노드의 이전노드를 가리킴 (왼쪽 링크필드) struct listNode* rlink; // 노드의 다음노드를 가리킴 (오른쪽 링크필드)} listNode;// 리스트 시작을 나타내는 head 노드를 구조체로 정의typedef struct{ listNode* head; // listNode구조체의 멤버로 구조체 포인터 변수 head 선언 } linkedList_h;// 공백 이중 연결 리스트를 생성하는 연산 (..
Source Code#include #include #include typedef struct ListNode{ char data[4]; struct ListNode* link;} listNode;typedef struct{ listNode* head;} linkedList_h;linkedList_h* createLinkedList_h(void){ linkedList_h* L; L = (linkedList_h*)malloc(sizeof(linkedList_h)); L->head = NULL; return L;}void freeLinkedList_h(linkedList_h* L){ listNode* p; while (L->head != NULL) { p = L->head; L->head = L->he..
Source Code#include #include #include typedef struct ListNode{ char data[4]; struct ListNode* link;} listNode;typedef struct{ listNode* head;} linkedList_h;linkedList_h* createLinkedList_h(void){ linkedList_h* L; L = (linkedList_h*)malloc(sizeof(linkedList_h)); L->head = NULL; return L;}void freeLinkedList_h(linkedList_h* L){ listNode* p; while (L->head != NULL) { p = L->head; L->head = L->hea..
Source Code1#include #include #include // 단순 연결 리스트의 노드 구조를 구조체로 정의typedef struct ListNode { char data[4]; struct ListNode* link;} listNode;// 리스트의 시작을 나타내는 head 노드를 구조체로 정의typedef struct { listNode* head;} linkedList_h;// 공백 연결 리스트를 생성하는 연산linkedList_h* createLinkedList_h(void) { linkedList_h* L; L = (linkedList_h*)malloc(sizeof(linkedList_h)); L->head = NULL; // 공백 리스트이므로 NULL로 설정 return L;}/..
Source Code#include void main(){ char* ptrArray[2]; char** ptrptr; int i; ptrArray[0] = "Korea"; ptrArray[1] = "Seoul"; ptrptr = ptrArray; printf("\n ptrArray[0]의 주소 (&ptrArray[0]) = %u", &ptrArray[0]); printf("\n ptrArray[0]의 값 (ptrArray[0]) = %u", ptrArray[0]); printf("\n ptrArray[0]의 참조값 (*ptrArray[0]) = %c", *ptrArray[0]); printf("\n ptrArray[0]의 참조문자열 (*ptrArray[0]) = %s \n", *ptrArray); pr..