반응형
세개의 정수를 입력받아 중앙값을 구하는 문제입니다.
문제의 해법을 한번에 해결하려 하지 마시고 기능을 나누어 기능에 맞는 함수를 구현하는 방식을 추천 드립니다.
그래야 나중에 복잡한 문제 해결할 때에도 많은 도움이 됩니다.
중앙값을 구하는 문제도 main함수에 모든 기능을 구현하려하면 어디서부터 어떻게 시작해야할지 모르게 됩니다.
그럴 때는 아래와 같이 간단히 생각나는 대로 구현해야할 함수 명만 적어두는 것도 도움이 됩니다.
#include<stdio.h>
int main()
{
input() // 1. 값 입력 받기
get_mid() // 2. 중앙값 구하기
output() // 3. 중앙값 출력하기
}
이렇게만 적어두면 그 다음에 각 함수를 구현하기만 하면 되기 때문에 무엇을 해야할지 명확해집니다.
그럼 각 함수를 구현해보겠습니다.
void input()
{
printf("a값: ");
scanf("%d", &a);
printf("b값: ");
scanf("%d", &b);
printf("c값: ");
scanf("%d", &c);
}
값을 입력 받는 함수는 값을 리턴해 줄게 없기 때문에 void 형으로 선언했습니다.
그 다음으로 간단한 출력 함수를 구현해보겠습니다.
void output()
{
printf("중앙 값은: %d입니다.", mid);
}
output함수 또한 리턴 값이 없기 때문에 void 형으로 선언하였습니다.
이제 마지막으로 중앙 값을 구하는 함수를 구현해보겠습니다.
void get_mid(int a, int b, int c)
{
if (a >= b)
{
if (b >= c)
mid = b;
else if (c >= a)
mid = a;
else
mid = c;
}
else if (b > c)
mid = c;
else
mid = b;
}
방법은 다양하다. get_mid함수도 리턴하여 출력할 수 있지만, main함수 내부를 최대한 간단하게 하기 위해 위와 같이
void 형으로 함수를 만들고 mid라는 int형 변수를 글로벌 변수로 선언하였다.
위 세가지 코드를 합친 코드는 다음과 같다.
#include<stdio.h>
int a, b, c;
int mid; // 글로벌 변수로 선언, 자동으로 0으로 초기화 됨.
void input()
{
printf("a값: ");
scanf("%d", &a);
printf("b값: ");
scanf("%d", &b);
printf("c값: ");
scanf("%d", &c);
}
void get_mid(int a, int b, int c)
{
if (a >= b)
{
if (b >= c)
mid = b;
else if (c >= a)
mid = a;
else
mid = c;
}
else if (b > c)
mid = c;
else
mid = b;
}
void output()
{
printf("중앙값은:%d입니다.", mid);
}
int main()
{
// 모든 구현은 각 함수에서 하고 main에서는 함수만 호출하였다.
input();
get_mid(a, b, c);
output();
return 0;
}
코드를 구현하는 스타일은 각자 다르기 때문에 위와 같은 코드가 어색하게 느껴질 수 있다.
다만, 이번 예제를 통해서 해야할 일을 함수로 만들면 얼마나 간편한지 보여주기 위해 노력하였습니다.
그럼 오늘도 고생하셨습니다!
반응형
'알고리즘 > 알고리즘 기초' 카테고리의 다른 글
[연습 예제 1-1] 최소 값 구하기 (0) | 2023.01.31 |
---|---|
알고리즘이란? (0) | 2023.01.31 |