unlimit13   3년 전

입력을 

5

3 2

4 3

6 6

3 2

4 1

로 넣으면 출력이 3 2 1 3 2 로 나오는데 정답은 4 2 1 4 2 가 되어야하는거 아닌가요..?

정답은 맞다고 나오는데 궁금해서 여쭤봅니다.

unlimit13   3년 전

#include

#include

main() {

int N;

scanf("%d", &N);

int** arr = (int**)malloc(sizeof(int) * N);

for (int j = 0; j < N; j++) {

arr[j] = (int*)malloc(sizeof(int) * 2);

}

for (int i = 0; i < N; i++) {

scanf("%d %d", &arr[i][0], &arr[i][1]);

}

for (int k = 0; k < N; k++) {

int rank = 1;

{for (int l = 0; l < N; l++) {

if(arr[k][0] < arr[l][0] && arr[k][1] < arr[l][1]){ rank++; }

}

printf("%d ", rank); }

}

free(arr);

}

또한 동적할당을 사용한 이코드는 왜 런타임에러가 뜨는지 궁금합니다.

pch6828   3년 전

우선 첫번째 질문에 대해서는 3 2 1 3 2 가 맞습니다. 키와 몸무게가 모두 큰 경우만 "덩치가 더 크다"라고 할 수 있으니까요

두번째 질문에 대해서는, int** arr = (int**)malloc(sizeof(int) * N); 여기서 sizeof(int)가 sizeof(int*)가 되어야 합니다. 지금은 arr에 필요한 만큼의 메모리가 할당되지 않아서 런타임에러가 발생하게 됩니다.

댓글을 작성하려면 로그인해야 합니다.