학습(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; } |
저는 코드의 가독성을 중요시하는데요, 인자의 개수가 무수히 많아지거나 하면, 그에 맞는 반복문과 알고리즘을 사용해야 하지만, 지금은 정답을 풀기 위해 쉬운 방법으로 하나씩 대입하는 방법을 사용해봤습니다.
처음 인자 값을 최댓값이라고 가정하고, 두 번째 인자와 비교, 두 번째 인자값이 더 크면, 두 번째 인자값이 최댓값이 되고, 아니라면 계속 최 대값은 첫 번째 인자입니다. 그렇게 마지막 인자와 그 전까지의 최댓값을 비교하여 최종적인 최댓값을 결정하는 알고리즘을 나열하여 풀었습니다.
'C Programming > 연습 문제' 카테고리의 다른 글
[C언어 연습문제]강좌 6. Playing With Characters(문자 입력), scanf()로 공백 입력받기 (0) | 2019.02.19 |
---|---|
[C언어 연습문제]강좌 5. Conditional Statements in C(C언어 if 조건문), 숫자 조건을 영어로 표현하기) (0) | 2019.02.18 |
[C언어 연습문제]강좌 4. Pointers in C(포인터로 2개의 변수를 반환하는 함수 구현) (0) | 2019.02.16 |
[C언어 연습문제]강좌 2. Sum and Difference of Two Numbers(printf()와 scanf()) (0) | 2019.02.14 |
[C언어 연습문제]강좌 1. "Hello World!" in C, C언어 소개 및 입출력 (0) | 2019.02.14 |