c언어 : 입력된 숫자의 횟수 세기 문제

조회수 6923회

안녕하세요 문제를 풀던중 2일동안 고민해도 더이상 안풀려서 문제의 원인을 찾고자 질문합니다.

문제 설명

0에서 9까지의 정수만 1000개를 입력받아,

각각의 정수가 입력된 횟수를 모두 출력하고,

그 중 가장 많이 입력받은 수와 그 개수를 출력하시오.

배열은 반드시 0으로 초기화하여 사용하시오.

입력 형식

공백으로 구분된 0부터 9까지의 정수 (그 외의 값은 들어오지 않는다고 가정할 것)

출력 형식

0-9까지, 각 정수를 출력하고, colon 을 넣은 후, 5칸에 우측정렬된 정수형으로 출력하고 개행문자로 구분하시오.

그 이후, 가장 많이 입력받은 수와 그 개수를 정수형으로 각각 개행문자를 추가해 출력할 것

#include<stdio.h>
#define size 1000

int main() 
{   
    int num[size] = { 0, },count[10][2] = { 0, }, Array[10] = { 0, };//배열 초기화
    int i,j,k=0;
    int a,b,temp;
    int frequency_number, frequency = 0;//빈도수를 나타내는 변수

    for (i = 0; i < size; i++)//배열의 크기만큼 입력을 받음
        scanf("%d", &num[i]);

    for (i = 0; i < size; i++)//배열의 크기만큼 반복
    {    
        for (j = 0; j < k; j++)
        {
            if (count[j][0] == num[i])
            {
                count[j][1]++;
                break;
            }         
        }
        if (j == k)
        {
            count[k][0] = num[i];
            count[k][1]++;
            k++;
        }
        if (num[i] >= 0 && num[i] < 10)//입력의 값이 0에서 9사이인지 확인
        {
            Array[num[i]]++;
        }
    }
    frequency = Array[0];
    frequency_number = 0;

    for (b = 0; b < size; b++)//오름차순 정렬
    {
        for (a=0; a < size-1-b; a++)
        {
            if (count[a][0] > count[a+1][0])
            {
                temp = count[a][0];
                count[a][0] = count[a+1][0];
                count[a+1][0] = temp;
            }
        }
    }

    for (i = 0; i < 10; i++)//출력
    {
        if (count[i][1]!= 0)
            printf("%d:%5d\n", count[i][0], count[i][1]);
    }
    for (int n = 0; n < 10; n++)
    {
        if (frequency < Array[i])
        {
            frequency = Array[i];
            frequency_number = i;
        }
    }
    printf("%d\n%d\n", frequency_number, frequency);  //빈도수 출력
    return 0;
}

제가 짠 코드 인데 출력값이 빈도수와 오름차순이 정확하게 떨어져야 하는데 예를들어 9 8 7 5 4 2 2 1 1 1을 넣으면 맨위는 0으로 채워지고 빈도수는 오름차순과 일치하지 않고 다르게 나옵니다 문제의 원인을 몰라서 질문드립니다

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    아래 코드 참고하세요.

    • 코드
    #define _CRT_SECURE_NO_WARNINGS
    
    #include<stdio.h>
    #define size 1000
    
    int main()
    {
        int num;
        int num_count[10] = { 0, };
        int max = 0, max_index = 0;
    
        for (int i = 0; i < size; i++)
        {
            scanf("%d", &num);
            num_count[num]++;
        }
    
        for (int i = 0; i < 10; i++)
        {
            if (num_count[i] > max)
            {
                max = num_count[i];
                max_index = i;
            }
        }
    
        for (int i = 0; i < 10; i++)
            printf("%d: %5d\n", i, num_count[i]);
    
        printf("가장 많이 입력받은 수: %d\n", max_index);
        printf("가장 많이 입력받은 수의 개수: %d\n", num_count[max_index]);
    
        return 0;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 덕분에 많은 도움이 되었어요 감사합니다~ 장현준 2020.9.27 17:28

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

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

(ಠ_ಠ)
(ಠ‿ಠ)