18870번: 좌표 압축 (acmicpc.net) 


#include <stdio.h>

#include <stdlib.h>

#include <string.h>




int compare(void const *x, void const *y){

    int **a = (int **)x;

    int **b = (int **)y;



    return **a - **b;


int main()

{   

    int a;

    scanf("%d", &a);


    int *arr1 = (int *)malloc(sizeof(int) * a);

    int **arr11 = (int **)malloc(sizeof(int) * a);




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

        scanf("%d", &arr1[i]);

        arr11[i] = &arr1[i];

    }


    qsort(arr11, a, sizeof(arr11[0]), compare);



    int idx = 0;

    int seq = 0;


    while(1){

        if(idx == a - 1){

            *arr11[idx] = seq;

            break;

        }


        else if(*arr11[idx] == *arr11[idx + 1]){

            *arr11[idx] = seq;

            idx++;

        }


        else{

            *arr11[idx] = seq;

            seq++;

            idx++;

        }

    }

 


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

        printf("%d ", arr1[i]);

    }

}


위의 좌표압축 문제를 풀려고 위의 코드를 작성했는데요.. vscode gcc로 돌렸을 때에는 배열크기를 1000000으로 잡고 돌리니까 터지길래 꾸역꾸역 malloc으로 받아서 풀고 있었는데, 혹시나해서 제출란에 배열크기 1000000으로 제출하니까 바로 성공뜨네요.. 제가 궁금한 거는 위 코드처럼 malloc으로 제출했을 때에는 런타임오류가 계속 뜨던데, 왜 그런지 혹시 가르쳐주실 코딩 goat 계신가요..?