https://www.hackerrank.com/challenges/sparse-arrays/problem
위의 사진과 같이 첫번째 줄에는 strings배열에 입력할 문장의 개수를 입력한다.
그다음 그 개수만큼 문장들을 입력한다.
입력을 했으면 이번에는 queries 배열에 입력할 문장의 개수를 입력한다.
그리고 그 개수만큼 입력을 한다.
출력되는 값은 queries 배열에 입력한 문장이 strings안에 몇개있는지이다.
즉 sample을 살펴보면 queries에 입력되는 값은 aba, xzxb, ab이고 이들은 strings 배열에 각각 2, 1, 0개 있으므로 출력되는 것은 2, 1, 0이다.
<main>
strings 포인터 배열, query 포인터 배열을 선언해 주었다.
strings안에 들어갈 문장의 개수는 str, query안에 들어갈 문장의 개수를 qry로 선언해 주었다.
각각 문장의 개수만큼 tmp에 값을 입력받고 그때 동적할당을 해준다. 동적할당 할때 크기는 len*sizeof(char)인데 len은 tmp의 길이 + '\0' = strlen(tmp)+1 이다. 그리고 동적할당한 포인터 배열 원소(ex. strings[i])에 strcpy를 이용하여 tmp를 그곳에 복사를 해준다.
그다음 matchingStrings함수를 호출한다.
각 문장이 strings안에 몇개 있는지를 출력한다.
<matchingStrings>
파라미터는 int str, char* strings[], int qry, char* query[]로 설정해 주었다.
그리고 반환값이 int *이 되어야지 각 문장들에 대하여 판단한 값들을 한꺼번에 리턴할 수 있다.
result를 int *타입으로 선언해 주었고 동적할당 해주었다.
correct변수는 query에 있는 문장이 strings에 있을 때 마다 1씩 값이 증가하는 역할을 한다.
각 문장에 대하여 strings에 있는 문장들을 다 비교를 하는데 strcmp함수는 같을 때 0 리턴을 하므로 !연산자를 사용하여 같을 때 correct가 증가하도록 만들어 준다.
그리고 비교가 끝나면 *(result+i)=correct; 라는 문장을 써서 집어넣어 준다. *(result+i)는 result[i]와 같기때문에 다음과 같이 써주는 것이다.
그리고 result를 리턴하면 된다.