Programming/C C++

    [DS] Tree: Height of a Binary Tree

    이진 트리의 높이(height)를 구하는 함수를 작성해야한다. 트리의 높이는 root 노드를 0으로 두고 아래로 한 층씩 내려갈 수록 1을 더해나가고 최말단 노드까지의 거리로 한다. int getHeight(struct node* root) { // Write your code here if(root == NULL) return -1; int m = getHeight(root->left)>getHeight(root->right)?getHeight(root->left):getHeight(root->right); return m+1; } 재귀문을 이용해 반복적으로 트리를 탐색할 수 있도록 했다. 그리고 root가 null일 때의 조건에서 -1을 리턴하면서 트리의 높이가 0부터 시작된다는 부분을 고려하도록 했다.

    Cats and a Mouse

    고양이 A와 B, 쥐 C사이의 거리를 이용해 경우에 따라 서로 다른 문자열을 출력하도록 하는 함수 작성 www.hackerrank.com/challenges/cats-and-a-mouse/problem char* catAndMouse(int x, int y, int z) { int d1 = abs(x-z); int d2 = abs(y-z); if(d1 > d2) return "Cat B"; else if(d1 < d2) return "Cat A"; else { return "Mouse C"; } } △ 작성한 부분 abs 함수를 사용해 x와 z, y와 z의 거리를 절대값으로 각각 d1, d2 변수에 저장한다. 그리고 그 값을 비교해 필요한 문자열을 출력한다. #include #include #includ..

    [DS] Delete duplicate-value nodes from a sorted linked list

    값이 같은 노드를 삭제하는 함수를 작성해야 한다. SinglyLinkedListNode* removeDuplicates(SinglyLinkedListNode* head) { SinglyLinkedListNode* tmp1 = head; SinglyLinkedListNode* tmp2 = head->next; SinglyLinkedListNode* t_free; while(tmp1->next != NULL){ if(tmp1->data == tmp2->data){ t_free = tmp2->next; tmp1 -> next = t_free; free(tmp2); tmp2 = tmp1->next; } else{ tmp1 = tmp1->next; tmp2 = tmp2->next; } } return head; ..

    [DS] Print in Reverse

    연결리스트의 head 노드를 파라미터로 전달받고 해당 연결리스트를 역순으로 출력하는 코드를 작성해야 한다. 처음엔 while문을 이용해 역순의 연결리스트를 생성해서 다시 while문을 사용해 값들을 출력하도록 했었는데 Time Limit에 걸려 통과되지 않았다.. 그래서 재귀함수의 형태로 코드를 작성했다. next); } printf("%d\n", head->data); }

    Angry Professor

    교수님이 학생들이 제 시간에 수업에 들어오지 않아서 화나셨다... 그래서 수업시작 시각까지 오는 학생의 수가 k 명이 되지 않는다면 수업을 취소시키기로 다짐하셨다고 한다. 수업이 취소된다면 "YES"를 리턴, 수업을 진행한다면 "NO"를 리턴하는 함수 angryProfessor를 작성해야한다. #include #include #include #include #include #include #include #include #include char* readline(); char** split_string(char*); // Complete the angryProfessor function below. // Please either make the string static or allocate on the ..

    Eletronics Shop

    주어진 budget(b)내에서 keyboard하나와 drive 하나를 가장 값이 많이 나가게 골랐을 때의 가격을 리턴하는 함수 getMoneySpent를 작성해야한다. 만약 최소가격이 budget을 넘는다면 -1을 리턴한다. #include #include #include #include #include #include #include char* readline(); char** split_string(char*); /* * Complete the getMoneySpent function below. */ int getMoneySpent(int keyboards_count, int* keyboards, int drives_count, int* drives, int b) { int cost=0; for(i..

    [DS] Get Node Value

    연결 리스트의 가장 마지막 노드를 0번 인덱스로 생각했을 때 끝 노드로부터의 인덱스가 주어지면 해당 노드의 데이터를 출력하는 프로그램이다. www.hackerrank.com/challenges/get-the-value-of-the-node-at-a-specific-position-from-the-tail/problem int getNode(SinglyLinkedListNode* head, int positionFromTail) { int size = 0; SinglyLinkedListNode* tmp = head; while(tmp->next != NULL){ size +=1; tmp = tmp->next; } tmp = head; for(int i=0;inext; } return (tmp->data);..

    Counting Valleys

    www.hackerrank.com/challenges/counting-valleys/problem 사용자로부터 U, D (uphills, downhills) 문자열을 입력받고 처음시작을 해수면(0)으로 해서 valley의 수를 구하는 코드를 작성해야 한다. int countingValleys(int steps, char* path) { int valley=0; int pre_level = 0,level =0; for(int i=0;i

    Drawing Book

    [ , 1] ▷ [2 , 3] ▷ [4, 5] ▷ .... 식으로 페이지가 체크되어 있는 책에서 원하는 페이지에 도달하기까지 넘겨야 할 최소의 페이지 수를 구하는 코드를 작성해야 한다. int pageCount(int n, int p) { int count =0; int p_count = p/2; int l_count; if(n%2 == 0){ if(p%2 == 0){ l_count = (n-p)/2; } else{ l_count = (n-p)/2 + 1; } } else{ l_count = (n-p)/2; } count = (p_count >= l_count)?l_count:p_count; return count; } △ 작성한 부분 1페이지 부터 넘기는 경우(p_count)와 가장 마지막 페이지(n)..

    [DS] Reverse a doubly-linked list

    양방향 연결 리스트 (순환X)의 방향을 바꾸는 코드를 작성해야 한다. www.hackerrank.com/challenges/reverse-a-doubly-linked-list/problem DoublyLinkedListNode* reverse(DoublyLinkedListNode* head) { DoublyLinkedListNode *link = malloc(sizeof(DoublyLinkedListNode)); DoublyLinkedListNode *rever = malloc(sizeof(DoublyLinkedListNode)); DoublyLinkedListNode *tmp = head; while(tmp ->next != NULL){ tmp = tmp->next; } rever = tmp; whil..