백준 2775 부녀회장 C

줍줍·2023년 4월 3일
0

백준

목록 보기
2/7
post-thumbnail

코드


#include <stdio.h>
#include <stdlib.h>

int c_h(int k, int n)
{
  if (n == 1)
    return 1;
  if (k == 0)
    return n;
  return (c_h(k - 1, n) + c_h(k, n - 1));
}

int main()
{
  int T, cnt = 0;
  // int *k = (int *)malloc(sizeof(int));
  // int *n = (int *)malloc(sizeof(int));

  scanf("%d", &T);
  int *k = (int *)malloc(sizeof(int) * T);
  int *n = (int *)malloc(sizeof(int) * T);

  for (int i = 0; i < T; i++)
  {
    scanf("%d", k + i);
    scanf("%d", n + i);
  }
  printf("\n\n\n");
  for (int i = 0; i < T; i++)
  {
    // printf("%d\n", c_h(*(k + i), *(n + i)));
    printf("%d\n", c_h(*k + i, *n + i));
  }
}

틀린점 1 *(k+i)


    printf("%d\n", c_h(*(k + i), *(n + i)));
    printf("%d\n", c_h(*k + i, *n + i));

이 부분이 이해가 되지 않는다.
*(k + i)*k + i의 차이점은 무엇일까
전자는 다음 주소의 값이고
후자는 주소가 가리키는 값에 +i 한 값을 보낸다 그래서 c_h가 호출하고 return 될 때 생각보다 큰 값이 return 되는 것

틀린점 2 sizeof(int)


    int *k = (int *)malloc(sizeof(int));
    int *n = (int *)malloc(sizeof(int));

여기서 sizeof(int)만이 아니라 sizeof(int)*T를 해줘야 내가 원하는 만큼 할당할 수 있다.

틀린점 3 free(k) free(n)


    free(k);
    free(n);

메모리를 사용하고 반납하는 습관을 가지자

profile
쉽게 설명하지 못하면 이해 못한 것

0개의 댓글