연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH4 (20번 문제)

라이피 (Lypi) 2018. 5. 9. 16:05
반응형

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("입니다.");

} 


//복습이니까 배열에 대한 지식까지 최대한 동원해서 풀음.

반응형