DFS / BFS
알고리즘/문제풀이2023. 9. 13. 09:25DFS / BFS

# 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] ] # 각 노드가 방문..

구현 -4문제
알고리즘/문제풀이2023. 9. 13. 09:25구현 -4문제

구현머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정->풀이를 떠오르는것은 쉽지만 소스코드로 옮기기 어려운 문제 -알고리즘은 간단한 코드가 지나칠 만큼 길어지는 문제-실수 연산을 다루고, 특정 소수점 자리까지 출력-문자열을 특정한 기준에 따라 끊어 처리-적절한 라이브러리를 찾아 사용(순열,조합) 2차원 공간에서의 처리다양한 시뮬레이션 공간 : 한 좌표에 존재하는 캐릭터가 반복적으로 어떤 위치로 이동한다.  어떤방향으로 이동할지 적을 수 있다.dx =[0]  ->행은 가만히 있고dy =[1]  ->열을 기준으로 하나 증가 ==오른쪽으로 이동  1.상하좌우2차원 행렬의 인덱스느 (0,0)으로 시작한다.하지만 문제에서 (1,1)으로 출발한다고 하면가장 첫번째 인덱스 사용하지 않는 방법 or (1,1)을 (0,0..

재귀 함수
알고리즘/문제풀이2023. 9. 13. 09:24재귀 함수

탐색 많은 데이터 중에서 원하는 데이터를 찾는 과정 특정 조건에 맞는 데이터 존재하는지 만약 존재한다면 어떤 위치에 존재하는지 찾는다. 스택 먼저 들어온 데이터가 나중에 나가는 선입후출 큐 먼저 들어온 데이터가 먼저 나가는 선입선출 재귀 함수(Recursive) - 자기 자신을 다시 호출 - 잘 활용하면 복잡한 알고리즘을 간결하게 작성할 수 있다. - 함수가 실행시 함수들의 정보가 스택프레임에 쌓여서 메모리에 올라감. ->컴퓨터 구조 측면에서 보았을 때, 스택 자료구조와 동일 그래서 스택 라이브러리 대신 재귀함수 이용하는 경우 많다. - 문제 풀이에서 사용할 때는 재귀 함수의 종료 조건을 반드시 명시 -> 명시하지 않으면 함수 무한 호출 - 모든 재귀 함수는 반복문을 이용하여 동일한 기능을 구현할 수 있..

그리디 6문제
알고리즘/문제풀이2023. 9. 13. 09:24그리디 6문제

현재 상황에서 지금 당장 좋은 것만 고르는 방법으로 그리디 알고리즘은 가장 큰 값만 고른다. (탐욕법) 1.거스름돈 1. 최적의 해를 빠르게 구하기 위해서는 가장 큰 화폐 단위부터 돈을 거슬러 준다. -> 동전 중 큰 단위가 항상 작은 단위의 배수이므로 작은 단위들의 동전을 종합해 다른 해가 나올 수 없다. 큰 단위가 작은 단위의 배수가 아니라면 최적의 해가 나오지 않는다. 2. n원을 거슬러 줘야 할때, 가장 먼저 500원으로 거슬러 줄 수 있을 만큼 거슬러 준다. (이후 100, 50, 10원~) n = 1260 #거슬러줄 돈 count = 0 # 큰 단위의 화폐부터 차례대로 확인하기 (리스트에 담기) coin_types = [500, 100, 50, 10] for coin in coin_types:..

C언어 트리
알고리즘/자료구조2023. 8. 24. 17:05C언어 트리

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..

C언어 스택
알고리즘/자료구조2023. 8. 24. 17:04C언어 스택

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..

C언어 이중 연결 리스트
알고리즘/자료구조2023. 8. 24. 17:04C언어 이중 연결 리스트

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;// 공백 이중 연결 리스트를 생성하는 연산 (..

C언어 연결리스트 -요일 삽입
알고리즘/자료구조2023. 8. 24. 17:03C언어 연결리스트 -요일 삽입

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..

C언어 연결리스트
알고리즘/자료구조2023. 8. 24. 17:03C언어 연결리스트

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..

C언어 단순 연결 리스트
알고리즘/자료구조2023. 8. 24. 17:02C언어 단순 연결 리스트

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;}/..

C언어 포인터
알고리즘/자료구조2023. 8. 24. 17:02C언어 포인터

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..

image