본문 바로가기
C Programming/연습 문제

[C언어 연습문제]강좌 3. Functions in C(최대 값을 구해보자 )

by 희품 2019. 2. 16.
반응형


학습(Study)

모든 프로그래밍 언어에 존재하는 함수를 써볼 시간이 왔어요. 여기서는 간단하게 C언어에서 함수를 사용하는 방법을 익히는 문제를 풀어보려고 해요.


함수는 명령문의 모음이라고 볼 수 있겠네요. (원본을 기준으로 설명해 드리려고 하는데, 영알못이라, Function are a bunch of statements glued together를 어떻게 의역해야 할지 모르겠네요) 함수는 0개 이상의 인자값을 가질 수 있고, 명령문을 수행합니다. 반환 유형에 따라 아무것도 반환하지 않거나, 무엇인가를 반환하는 기능을 합니다.


C언어 함수의 간단한 사용법입니다.

return_type function_name(arg_type_1 arg_1, arg_type_2 arg_2, ...)

{

...

...

[if return_type is non void]

return something of type `return_type`;

}


예를 들어 4개의 변수를 인자로 받아들여 그 합을 반환하는 함수를 구현해보겠습니다.

int sum_of_four(int a, int b, int c, int d)

{

int sum = 0;


sum += a;

sum += b;

sum += c;

sum += d;


return sum;

}


목표(Objective)

4개의 인자값을 받아 가장 큰 수를 반환하는 함수를 작성해야 한다.


과제(Task)

int max_of_four(int a, int b, int c, int d) 함수 작성하기

이 함수는 4개의 인자값을 읽고, 인자 값 중에 가장 큰 수를 반환한다.


입력 형식(Input Format)

각 줄의 하나씩 4개의 정수 a, b, c, d를 입력받는다.


제약 조건(Constraints)

-


출력 형식(Output Format)

4개의 정수 중 가장 큰 수를 출력한다.


입력 예제(Sample Input)

3

4

6

5


출력 예제(Sample Output)

6


초기 값 

제시된 코드입니다. 아래 코드에서 제시된 과제에 맞도록 코드를 작성하시면 됩니다.

#include <stdio.h>
/*
Add `int max_of_four(int a, int b, int c, int d)` here.
*/
 
int main() {
    int a, b, c, d;
    scanf("%d %d %d %d"&a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}


코드 및 해설

이제 해설이 필요한 시점이 왔어요. (아직은 아닌 것 같은데, 무안하니까 하겠습니다)

함수를 사용해 4개의 수 중에 최댓값을 받아오는 예제입니다. 다양한 방법으로 구현을 할 수 있는 문제입니다.


Hacker Rank에 공개된 답안 예제입니다.

#include <stdio.h>
/*
Add `int max_of_four(int a, int b, int c, int d)` here.
*/
int max(int a, int b)
{
    return a > b ? a : b;    
}
int max_of_four(int a, int b, int c, int d)
{
    return max(a, max(b, max(c, d)));
}
int main()
{
    int a, b, c, d;
    scanf("%d %d %d %d"&a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}


제가 정답을 풀기 위해 처음 작성한 예제입니다.

#include <stdio.h>
 
int max_of_four(int a, int b, int c, int d)
{
    int max = 0;
    max = a;
    if(max < b)
        max = b;
    if(max < c)
        max = c;
    if(max < d)
        max = d;
 
    return max;
}
 
int main()
{
    int a = 0, b = 0, c = 0, d = 0;
    scanf("%d %d %d %d"&a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}
ㄱㅇㅇㅇㄻㅇㄻ

저는 코드의 가독성을 중요시하는데요, 인자의 개수가 무수히 많아지거나 하면, 그에 맞는 반복문과 알고리즘을 사용해야 하지만, 지금은 정답을 풀기 위해 쉬운 방법으로 하나씩 대입하는 방법을 사용해봤습니다.


처음 인자 값을 최댓값이라고 가정하고, 두 번째 인자와 비교, 두 번째 인자값이 더 크면, 두 번째 인자값이 최댓값이 되고, 아니라면 계속 최 대값은 첫 번째 인자입니다. 그렇게 마지막 인자와 그 전까지의 최댓값을 비교하여 최종적인 최댓값을 결정하는 알고리즘을 나열하여 풀었습니다.



반응형