HackerRank 49

[HackerRank] Linked Lists > Insert a Node at the Tail of a Linked List

https://www.hackerrank.com/challenges/insert-a-node-at-the-tail-of-a-linked-list/problem 연결리스트의 마지막에 노드를 삽입하는 문제다. SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) { if (head == NULL) { return create_singly_linked_list_node(data); } SinglyLinkedListNode *node = head; while (node->next != NULL) { node = node->next; } node->next = create_singly_linked_list_node(data); r..

[HackerRank] Implementation > The Hurdle Race

허들의 높이가 배열로 들어오고 Dan의 캐릭터가 뛸 수 있는 높이가 k로 들어온다. 마법포션을 먹으면 캐릭터가 뛸 수 있는 최고 높이보다 1 더 뛸 수 있게 된다. 허들을 전부 넘기 위해 마법포션을 몇 개 먹어야 할까? int hurdleRace(int k, int height_count, int* height) { int max = height[0], answer; for(int i=1; i0) answer = max-k; else answer = 0; return answer; } 가장 높은 허들의 높이를 저장할 max를 선언하고 높이배열의 첫번째 값으로 초기화한다. 답을 반환할 answer를 선언한다. for문으로 max에 허들배열중에 가장 높은 값을 저장하기 위해 if문으로 max와 height[..

[HackerRank] Sorting > Running Time of Algorithms

https://www.hackerrank.com/challenges/runningtime/problem insertion sort로 정렬되는 동안 값이 자리가 몇 번 바뀌었는지 세는 문제다. int runningTime(int arr_count, int* arr) { int cnt=0, temp; for(int i=0; i arr[i+1]){ for(int j=i+1; j>=0; j--){ if(arr[j] < arr[j-1]){ temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; cnt++; } } } } return cnt; } 일단 삽입정렬로 정렬해준 뒤 변수 하나만 추가해 정렬될 때 숫자가 증가되도록 하면 된다. 이중 for문을 사용하는데 첫번째 for문을 ..

[HackerRank] Sorting > Counting Sort 2

숫자들을 크기순으로 정렬하고 출력하면 된다. 다만 counting sort 1처럼 100크기의 배열을 만들어 숫자가 각각 몇 개 있는지 세고, 그 개수만큼 출력하면 된다. n의 범위가 0이상 1000000이하인 것에 주의한다. int* countingSort(int arr_count, int* arr, int* result_count) { *result_count=arr_count; static int rArr[100] = {0}, ret[1000000] = {0}; int i, j, seq=0; for(i=0; i

[HackerRank] Strings > Caesar Cipher

카이사르 암호를 구현하는 문제이다. 카이사르 암호는 알파벳을 지정한 수만큼 움직여 암호화하는 기법이다. 대문자와 소문자를 문자열에 저장해 두고 그 안에서 돌릴 수 있을까 생각해봤는데 반복문이 많이 돌아가면 더 복잡해질 것 같아 경우의 수를 나누어서 더해주었다. char* caesarCipher(char* s, int k) { int i, n = strlen(s); for(i=0; i='A'&&s[i]=26) k%=26; if(s[i]+k>'Z') s[i] -= 26; s[i] = s[i]+k; } if(s[i]>='a'&&s[i]=26) k%=26; if(s[i]+k>'z') s[i] -= 26; s[i] = s[i]+k; } } return s; } 암호문에서 대문자와 소문자를 구분했다. s[i]에 k..

[HackerRank] Strings > Strong Password

strong password에는 5가지 기준이 있다. 최소 6자리 이상 숫자 1개 이상 소문자 1개 이상 대문자 1개 이상 특수문자 1개 이상 !@#$%^&*()-+ 문제에서 준 문자열을 사용했다. numbers = "0123456789" lower_case = "abcdefghijklmnopqrstuvwxyz" upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" special_characters = "!@#$%^&*()-+" strong password를 위해 몇 개의 문자를 추가해야 하는지 출력하면 된다. 첫번째 예제를 보면, Ab1의 경우 조건 1, 5를 충족하지 않는다. 6자리를 충족하려면 특수문자를 포함한 3개의 문자가 더 필요하므로 출력할 정수는 3이다. 두번째 예제는 ..

[HackerRank] Strings > Pangrams

pangram은 주어진 모든 문자를 한 번 이상 사용해 만든 문장이다. 이 문제에서는 알파벳을 a부터 z까지 전부 사용한 문장은 pangram을 출력, 아닌 문장은 not pangram을 출력하게 한다. 대문자는 소문자로 변환하고 int형 배열에 알파벳이 사용된 숫자를 저장했다. 배열에 0이 있으면 not pangram을 출력하고 그렇지 않으면 pangram을 출력한다. char* pangrams(char* s) { static char pan[] = "pangram"; static char n_pan[] = "not pangram"; int i, j; char al[27] = {0}; int check[26] = {0}; for(i=0; i='A'&&s[i]

[HackerRank] Search > Ice Cream Parlor

두 명의 친구가 두 가지 맛의 아이스크림을 사는데, 가격에 맞춰서 맛을 고르면 되는 문제다. 아이스크림 가격이 들어 있는 배열에서 두 가지 다른 맛을 골라 m의 가격에 맞추면 된다. There will always be a unique solution. ▷▶ 합이 m이 되는 경우는 한가지라고 한다. 배열에서 반복문을 돌려 합이 m이 되는 순간의 순서를 answer에 순서를 저장했다. int* icecreamParlor(int m, int arr_count, int* arr, int* result_count) { *result_count = 2; int i, j; static int answer[2]={0}; for(i=0; i