반응형
등장하는 가장 많은 수와 적은 수 구하기
문제설명
자연수가 들어있는 배열이 있습니다. 이 배열에서 가장 많이 등장하는 숫자의 개수는 가장 적게 등장하는 숫자의 개수의 몇배인지 구하려고 합니다.
다음과 같이 간단히 프로그램 구조를 작성했습니다.
1. 배열에 들어있는 각 자연수의 개수를 셉니다.
2. 가장 많이 등장하는 수의 개수를 구합니다.
3. 가장 적게 등장하는 수의 개수를 구합니다.
4. 가장 많이 등장하는 수가 가장 적게 등장하는 수보다 몇 배 더 많은지 구합니다.
자연수가 들어있는 배열 arr과 arr의 길이 arr_len이 매개변수로 주어질 때, 빈칸에 주어진 함수와 매개변수를 채워주세요.
예시
arr | arr_len | return |
[1, 2, 3, 3, 1, 3, 3, 2, 3, 2] | 10 | 2 |
코드 해석 및 전체 코드
1. counter[arr[i]]++;
counter 배열의 방 중 arr[i]의 수 방을 +1한다.
arr[0]은 1로 counter[1]의 값을 +1한다.
2. arr배열의 값이 ret보다 클 시 if문을 수행한다.
arr[i] | ret (초깃값 : 0) |
arr[0] = 0 | 0 |
arr[1] = 2 | 2 |
arr[2] = 3 | 3 |
arr[3] = 5 | 5 |
3. arr[i]의 값이 0이 아니고 ret의 초기값 1001보다 작을 시 (두 조건 모두 만족할 시) if문을 수행한다.
arr[i] | ret (초깃값 : 1001) |
arr[0] = 0 | 1001 (첫번째 조건 만족 X) |
arr[1] = 2 | 2 |
arr[2] = 3 | 2 |
arr[3] = 5 | 2 |
4. 배열을 매개변수로 넘겨줄 때 arr 배열이 아닌 counter 배열을 넘겨주어야 한다.
arr 배열은 중복된 수들이 들어있는 배열이고 counter 배열은 arr 배열의 수의 중복 수를 나타낸 배열이므로
최댓값과 최솟값을 구하기 위해선 counter 배열을 넘겨줘야한다.
더보기
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 배열에 들어있는 각 자연수의 개수 세는 함수
int* func_a(int arr[], int arr_len) {
int* counter = (int*)malloc(sizeof(int) * 1001);
//배열 초기값 0 넣기
for (int i = 0; i < 1001; i++)
counter[i] = 0;
for (int i = 0; i < arr_len; i++)
counter[arr[i]]++; // 1
return counter;
}
// 가장 많이 등장한 수의 개수 구하는 함수
int func_b(int arr[], int arr_len) {
int ret = 0;
for (int i = 0; i < arr_len; i++) {
if (ret < arr[i]) // 2
ret = arr[i];
}
return ret;
}
// 가장 적게 등장한 수의 개수 구하는 함수
int func_c(int arr[], int arr_len) {
const int INF = 1001;
int ret = INF;
for (int i = 0; i < arr_len; i++) {
if (arr[i] != 0 && ret > arr[i]) // 3
ret = arr[i];
}
return ret;
}
int solution(int arr[], int arr_len) {
int* counter = func_a(arr, arr_len);
int max_cnt = func_b(counter, arr_len); // 4
int min_cnt = func_c(counter, arr_len); // 4
return max_cnt / min_cnt; // 5
}
int main() {
int arr[10] = { 1, 2, 3, 3, 1, 3, 3, 2, 3, 2 };
int arr_len = 10;
int ret = solution(arr, arr_len);
printf("The return value of solution function : %d\n", ret);
}
반응형
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.6] 369 게임 박수의 개수는? / cos pro 2급 c언어 기출 문제 (0) | 2021.05.05 |
---|---|
[No.5] 배열의 순서 뒤집기 / cos pro 2급 c언어 기출 문제 (3) | 2021.05.05 |
[No.3] 시작 날짜와 끝 날짜의 사이 날짜 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.03 |
[No.2] 쇼핑몰 등급 별 할인 금액 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.02 |
[No.1] 단체 티셔츠 주문하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.02 |
댓글