Missing Numbers | HackerRank
Find the numbers missing from a sequence given a permutation of the original sequence
www.hackerrank.com
<문제>

input: 총 네 줄의 입력을 받는다. 첫번째 줄에는 첫번째 리스트의 크기를 입력받고, 두번째 줄에는 그 리스트의 원소들을 차례로 입력받는다.
세번째 줄에는 두번째 리스트의 크기를 입력받고, 네번째 줄에는 두번째 리스트의 원소를 입력받는다.
output: 두 리스트 중 한쪽에는 없는 missing numbers를 출력한다.
<코드>
int* missingNumbers(int arr_count, int* arr, int brr_count, int* brr, int* result_count) {
int numbers[10001];
int * missing,p = -1;
missing = malloc(sizeof(int) * 100);
memset(numbers,0,sizeof(numbers));
for(int i = 0;i < brr_count ;i++) numbers[ brr[i] ]++;
for(int i = 0;i < arr_count ;i++) numbers[ arr[i] ]--;
for(int i = 0 ; i < 10001 ; i++)
{
if( numbers[ i ] > 0 )
{
p++;
missing[p] = i;
}
}
*result_count = p+1;
return missing;
}
<풀이>
먼저 숫자들을 저장하기 위해 numbers[] 배열을 선언하였다. 그리고 두번째 리스트에서의 frequency를 계산하기 위해 for문을 사용하여 brr[i]의 값을 numbers[]의 인덱스로 하고 1씩 증가시켰다. 다음으로는 첫번째 리스트에서 두번째 리스트와 겹치면 그 값은 지우기 위해 numbers[arr[i]]--를 하였다. 마지막으로, numbers[] 배열의 전체 범위를 for문을 통해 살펴보면서 0보다 크면 p값을 하나 증가시키고, missing[p]값에 i값을 입력했다.
missing 포인터를 리턴하여 문제를 풀 수 있었다.
<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글
| [HackerRank] Day of the Programmer (0) | 2021.09.18 |
|---|---|
| [HackerRank] Search- Sherlock and Array (0) | 2021.09.18 |
| [HackerRank] Jumping on the Clouds: Revisited (0) | 2021.09.11 |
| [HackerRank] Counting Valleys (0) | 2021.08.28 |
| [HackerRank] Get Node Value (0) | 2021.08.28 |