c언어 배열 5의 배수를 지웠는데 실행을 하면 마지막 숫자 12가 나오지 않는다

조회수 354회

void main()
{
    int D[10], i, j, k, N = 10;

    srand(0);
    for (i = 0; i < 10; i++) D[i] = rand() % 100;// 난수 설정
    printf("Before : ");
    for (i = 0; i < 10; i++) printf("%d ", D[i]); puts("");

    for (i = 0; i < N - 1; i++)// i가  8이 될때 까지 반복
        for (j = i + 1; j < N; j++)// i=0 j = 1부터 n = 10 9반복
            if (D[i] == D[j])
            {
                remove_element(D, j, &N);// 중복된 수를 제거 D[j] 안에 있는수를 없애기
                j--;
            }
    remove_5(D, &N);

    printf("After : ");
    for (i = 0; i < N; i++) printf("%d ", D[i]);
    puts("");
}

//void remove_element(int* d, int i, int* n)// d는 배열 i = j n = &N = 10 N의 총량을 없애기
{
    for (int j = 0; j < *n; j++)
    {
        d[i] = d[i + 1];// 틀린것을 앞에있는 숫자로 바꾸기
        (*n)--;
         i++;
    }
}
void remove_5(int* d, int* n)
{
    for (int i = 0; i < *n; i++)//  5의 배수 또는 5가 들어간 숫자 없애기
    {
        if (d[i] % 5 == 0 || d[i] % 10 == 5)
        {
            d[i] = d[i + 1];
            (*n)--;
        }
    }
}

배열의 중복 숫자와 5가 들어가는 수 5의 배수를 지웠는데 실행을 하면 마지막 숫자 12가 나오지 않는 이유가 궁금합니다

  • D에서 원소를 없애나가는 방식 같은데 접근법을 바꿔서 다시 짜 보시면 어떨까요? 새 배열 E를 하나 더 만들고, D의 원소 중에서 E에 아직 없고 5의 배수가 아닌 숫자만 E에 추가하는 방식으로 말이죠. 엽토군 2022.9.15 10:36

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)