반응형
20. 15개의 수를 입력받아 출현 빈도수가 가장 적은 값을 구하여 출력하는 프로그램을 작성하라.
#include <stdio.h> int main() { const int N = 5; int input[N], num[N] = { '\0', }, min[N] = { '\0', }; int min_frequency = N, now_frequency = 0; // ※ 배열에 수를 입력받는 부분 printf("%d개의 수를 입력받습니다. \n", N); for (int i = 0; i < N; i++) { printf("%d번째 수를 입력하세요. ", i + 1); scanf_s("%d", &input[i]); } //------- //※ 입력받은 값의 빈도를 확인하기. for (int i = 0; i < N; i++) { now_frequency = 0; int j = 0; //내부 반복문용 변수 미리 선언 //* num배열에 현재의 input[i]값과 같은 값이 있으면 i의 처음으로 보내기. while (j < N) { if (input[i] == num[j]) { break; } j++; } if (input[i] == num[j]) { continue; } // break로 while문을 빠져나온뒤 continue로 날려버린다. //* num[j]배열은 이미 나왔던 값이 들어가는 배열. j = 0; while (num[j] != '\0') { j++; } num[j] = input[i]; //* 현재 input[i]값이 처음 나온 값이면 빈도를 확인한다. for ( j = 0; j < N; j++) { if (input[i] == input[j]) { now_frequency++; } } //* 현재 값의 빈도가 가장 적었던 빈도와 같으면 min배열의 첫 '\0'값에 input[i]값을 넣는다. if (now_frequency == min_frequency) { j = 0; while (min[j] != '\0') { j++; } min[j] = input[i]; } //* 현재 값의 빈도가 가장 적었던 빈도보다 작으면 if (now_frequency < min_frequency) { min_frequency = now_frequency; //가장 적었던 빈도를 갱신하고 min[0] = input[i]; //적은 빈도의 수를 저장하는 배열의 처음에 넣고 for (j = 1; j < N; j++) { //나머지는 '\0'으로 초기화 min[j] = '\0'; } } //적을 때 가장 적었던 빈도를 갱신하므로 같을때와 적을때의 순서가 바뀌면 안된다. } printf("가장 적게 입력된 수가 입력된 횟수는 %d입니다. \n", min_frequency); printf("가장 적게 입력된 수는 "); int i = 0; while (min[i] != '\0') { printf(" %d", min[i]); i++; } printf("입니다."); }
//복습이니까 배열에 대한 지식까지 최대한 동원해서 풀음.
반응형