1. 큐를 이용해 순차적으로 탐색(BFS 방식?) 조건을 3가지로 구분해서 구현 자식 노드가 없는 경우 왼쪽 자식 노드만 있는 경우 오른쪽 자식 노드만 있는 경우 void levelOrderTraversal(BSTNode *root) { Queue *q = malloc(sizeof(Queue)); BSTNode *cur; q->head = NULL; q->tail = NULL; enqueue(&(q->head), &(q->tail), root); while (!isEmpty(q->head)) { cur = dequeue(&(q->head), &(q->tail)); printf("%d ", cur->item); if (cur->left == NULL && cur->right != NULL) { enqueu..
728x90
반응형
크래프톤정글
1. 두 개의 트리 구조적 일치 확인하기(값, 구조 동일) 트리의 노드를 비교해가면서 다르면 0을 반환 int identical(BTNode *tree1, BTNode *tree2) { int result1, result2; if (tree1->item != tree2->item) { return 0; } if (tree1 == NULL && tree2 == NULL) { return 1; } result1 = identical(tree1->left, tree2->left); result2 = identical(tree1->right, tree2->right); if (result1 == result2) { return 1; } else { return 0; } } 2. 트리의 최대 높이 구하기 노드가 ..
1. 연결 리스트를 이용해 스택 만들기 큐는 선입선출(FiFO : First In, First Out)이고, 스택은 후입선출(LIFO : Last In, First Out)이므로 구현이 약간 다름 void createStackFromLinkedList(LinkedList *ll, Stack *s) { ListNode *cur = ll->head; ListNode *cur_s = s->ll.head; ListNode *new_node; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드를 만들고 메모리 할당을 받아 주소를 저장 new_node = malloc(sizeof(ListNode)); // 스택에 노드가 있는 경우 if (s->ll.head ..
1. 연결 리스트를 이용해 큐를 만들기 큐에 첫 번째 노드를 생성하는 경우(큐가 비었을 경우) 큐가 비지 않고 노드가 있는 경우로 나누어서 노드를 추가 void createQueueFromLinkedList(LinkedList *ll, Queue *q) { ListNode *cur = ll->head; ListNode *tail, *new_Node = NULL; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드에 메모리를 할당 받아 주소값을 저장 new_Node = malloc(sizeof(ListNode)); if (q->ll.head == NULL) { // 큐가 비었다면 연결 리스트의 cur값의 item을 new_Node의 item에 저장 ..
1. 홀수를 가진 노드를 뒤로 넣어 정렬하기 해결하지 못한 문제 분석하다가 홀수를 처리하는 과정에서 포인터를 이상한 곳에 지정해 세그멘테이션 폴트 발생 꼬리가 현재 노드(홀수)를 next로 가리킴 현재(홀수)의 전 노드가 현재(홀수)의 next를 가리킴 현재(홀수)의 next를 지움(NULL) cur를 이전 노드로 이동 꼬리 노드를 현재(홀수) 이동시킨 노드로 이동 void moveOddItemsToBack(LinkedList *ll) { ListNode *cur, *prev, *tail; cur = ll->head; int size = ll->size; while (cur != NULL) { prev = cur; cur = cur->next; tail = prev; } cur = ll->head; pr..
1. 정렬하면서 노드 삽입하기 ll->head가 없는경우 가장 작은 수가 들어오는 경우 중간 크기의 수가 들어오는 경우 가장 큰 수가 들어오는 경우 int insertSortedLL(LinkedList *ll, int item) { ListNode *pre, *cur, *temp; if (ll->head == NULL) { cur = ll->head; ll->head = malloc(sizeof(ListNode)); ll->head->item = item; ll->head->next = NULL; ll->size++; printf("Head 추가\n"); return 0; } cur = ll->head; pre = NULL; while (cur != NULL) { if (cur->item == item)..
알고리즘 문제풀이 9655. 돌 게임 돌이 3개 이하인 경우에는 1개씩 밖에 못가져감 그렇기 때문에 1일 때는 SK가, 2일때는 CY가 승리 돌의 개수가 홀수일때는 먼저 하는 사람이 이김(SK), 짝수일 경우 뒤에 하는 사람이 이김(CY) import sys input = sys.stdin.readline n = int(input()) if n < 3: if n == 1: print("SK") elif n == 2: print("CY") elif n % 2 == 1: print("SK") elif n % 2 == 0: print("CY") 2839. 설탕 배달 5로 나뉘어질 때까지 3을 빼고 카운트 1개 증가 5와 3으로 나누어 떨어지지 않는 경우에는 -1 출력 import sys input = sys...
728x90
반응형