본문 바로가기

Education

[부스트 코딩 뉴비 챌린지 2020] FINAL 미션 02 : N의 약수로 N을 구하는 프로그램

반응형

✔︎ 미션 2 (난이도 : 하)

1. 미션 제목
    N 의 약수들

 

2. 지시문

    양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 아래와 같이 구현했다.

 

*아래 주석 부분을 채워 주세요.

#include <stdio.h>
#include <stdlib.h>

int *divisor;

int
compare(const void * a, const void * b)
{
    return (*(int*)a - *(int*)b);
}

int
main()
{
    int N;
    scanf("%d", &N);
    
    divisor = malloc(sizeof(int) * N);

    for(int i = 0; i < N; i++){
        int tmp;
        scanf("%d", &tmp);
        divisor[i] = tmp;
    }

    qsort(divisor, N, sizeof(int), compare);

    int answer = /**여기를 채우세요.**/;
    printf("%d\n", answer);

    return 0;
}

3. 핵심 개념
    #약수 #정렬

 

4. 부가 설명
    - 약수: https://en.wikipedia.org/wiki/Divisor
    - 정렬: http://www.cplusplus.com/reference/cstdlib/qsort/


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int *divisor;   //숫자N의 약수들이 담긴 int 배열

int compare(const void * a, const void * b)
{
    return (*(int*)a - *(int*)b);
}

int result(int N){
    int Num = 4;    //답은 최소 4부터 가능.

    bool check = false;
    bool check2 = false;

    while(check == false){
        for(int i = 0; i < N; i++){
            if(Num % divisor[i] == 0 && Num != divisor[i]){
                check2 = true;
            }else{
                Num++;
                check2 = false;
                break;
            }
        }
        if(check2 == true){
            check = true;
        }
    }
    return Num;
}

int main() {
    int N;  //숫자N의 약수의 개수
    scanf("%d", &N);

    divisor = malloc(sizeof(int) * N);

    for(int i = 0; i < N; i++){
        int tmp;
        scanf("%d", &tmp);  //숫자N의 약수들을 모두 받아옴
        divisor[i] = tmp;
    }

    qsort(divisor, N, sizeof(int), compare);

    int answer = result(N);
    printf("%d\n", answer);

    return 0;
}
반응형