본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.4] 등장하는 가장 많은 수와 적은 수 구하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 3.
반응형

등장하는 가장 많은 수와 적은 수 구하기

 

문제설명

 

자연수가 들어있는 배열이 있습니다. 이 배열에서 가장 많이 등장하는 숫자의 개수는 가장 적게 등장하는 숫자의 개수의 몇배인지 구하려고 합니다. 

 

다음과 같이 간단히 프로그램 구조를 작성했습니다.

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);
}

cos pro 2급 기출문제

github

반응형

댓글