HackerRank 49

[HackerRank C] Tree : Preoreder Traversal

전위순회로 트리를 출력하는 문제이다. 위의 트리를 전위순회로 거치면 1 2 5 3 4 6 순이다. void preOrder( struct node *root) { if(root) printf("%d ", root->data); if(root->left) preOrder(root->left); if(root->right) preOrder(root->right); } 주의할 점은 root가 NULL이 아니어야 한다는 것이다. 전위 순회는 root->left->right 노드 순이다. 이 순서를 따라 재귀적으로 코드를 짜주면 된다. if문으로 root가 null인지 아닌지 확인한 뒤 null이 아니라면 그 값을 출력한다. left 노드가 null이 아니면 preOrder 함수에 root->left를 인자로 넣..

[HackerRank] Sorting : Find the Median

배열을 오름차순으로 정렬한 후, 가운데 값을 출력하는 문제이다. void insertion_sort(int list[], int n){ int i, j, key; for(i = 1; i = 0 && list[j] > key; j--){ list[j+1] = list[j]; } list[j+1] = key; } } int findMedian(int arr_count, int* arr) { insertion_sort(arr, arr_count); return arr[(arr_count-1)/2]; } 삽입정렬을 이용해 배열을 정렬하고 가운데 값을 반환해준다. 삽입정렬은 정렬된 앞부분과 자신을 비교해 자신의 위치를 찾아 삽입하는 알고리..

[HackerRank] Arrays : 2D Array - DS

문제 배열을 입력받아 순서가 반대로 된 배열을 출력하는 문제이다. // Complete the reverseArray function below. // Please store the size of the integer array to be returned in result_count pointer. For example, // int a[3] = {1, 2, 3}; // // *result_count = 3; // // return a; // int* reverseArray(int a_count, int* a, int* result_count) { int *b; b = (int*)malloc(sizeof(int)*a_count); *result_count = a_count; for(int i=0; i

[HackerRank] Sorting : Insertion Sort - Part 2

문제 arr[0]과 arr[1]을 비교해 arr[0] > arr[1]이면 arr[0]이 자리를 찾아갈 때까지 왼쪽으로 이동한다. 왼쪽으로 이동한다는 것을 생각했으면 빨리 풀었을텐데, 이중 for문 쓰는 거에 정신이 팔려 한참 고민했다. j가 감소하는 경우를 생각하지 못하고 계속 증가하는 방향으로만 머리를 쓰니 안풀릴수밖에... 증가하는 방식으로 풀려면 매우 복잡해질 것 같다. // Complete the insertionSort2 function below. void insertionSort2(int n, int arr_count, int* arr) { int temp; for(int i=0; i arr[i+1]){ for(int j=i+1; j>=0; j--){ if(arr[j] < arr[j-1]){..

[HackerRank(C)] Sorting : Insertion Sort - Part 1

문제 링크 Insertion Sort - Part 1 | HackerRank Insert an element into a sorted array. www.hackerrank.com Algorithm > sorting > Insertion Sort n이 5이면 배열은 5만큼 입력받는다. arr[1,2,4,5,3]이 입력으로 들어왔을 때, 가장 오른쪽에 있는 arr[4] = 3을 왼쪽값과 비교하면서 오름차순으로 정렬되도록 위치시키면 된다. arr[3] > arr[4] = 3 이므로 arr[4]는 arr[3] arr[2] > 3 이므로 arr[3] = arr[2] arr[1] < 3 이므로 arr[2] = 3 코드 // Complete the insertionSort1 function below. void i..