네 개의 숫자 a, b, c, d가 있다고 가정해 봅시다. 이번 글에서는 직접 작성한 함수를 활용해 이 네 수 중 최댓값을 구하는 방법을 알아보겠습니다.
핵심 아이디어는 간단합니다. 두 수를 입력받아 그중 큰 값을 반환하는 max() 함수를 하나 만들고, 이 함수를 재사용하여 네 수 전체의 최댓값을 단계적으로 구하는 것입니다.
예를 들어 입력이 a = 5, b = 8, c = 2, d = 3이라면, 출력은 8이 됩니다.
문제 해결 접근 방식
이 문제는 다음 단계를 따라 해결할 수 있습니다.
두 개의 매개변수 x와 y를 받는 max() 함수를 정의합니다.
x와 y 중 더 큰 값을 반환합니다.
네 개의 숫자 a, b, c, d를 준비합니다.
left_max := max(a, b) — 앞의 두 수 중 최댓값을 구합니다.
right_max := max(c, d) — 뒤의 두 수 중 최댓값을 구합니다.
final_max := max(left_max, right_max) — 두 결과를 비교해 최종 최댓값을 구합니다.
final_max를 반환합니다.
즉, 네 수를 두 쌍으로 나누어 각각의 최댓값을 먼저 구한 뒤, 마지막으로 두 최댓값을 다시 비교하는 분할 정복 방식입니다. 이렇게 하면 코드가 간결해지고 재사용성도 높아집니다.
예제 코드
아래 구현 예시를 통해 더 자세히 이해해 보겠습니다.
#include <stdio.h>
int max(int x, int y){
if(x > y){
return x;
}else{
return y;
}
}
int main(){
int a = 5, b = 8, c = 2, d = 3;
int left_max = max(a, b);
int right_max = max(c, d);
int final_max = max(left_max, right_max);
printf("Maximum number is: %d", final_max);
}입력
a = 5, b = 8, c = 2, d = 3
출력
Maximum number is: 8
코드 설명
max() 함수는 if-else 문을 사용해 x가 y보다 크면 x를, 그렇지 않으면 y를 반환합니다. main() 함수에서는 max(a, b)와 max(c, d)를 호출해 각각 left_max와 right_max에 저장한 후, 이 두 값을 다시 max()에 전달해 final_max를 계산합니다. 최종 결과는 printf()를 통해 화면에 출력됩니다.
참고로 C 표준 라이브러리에는 이미 유사한 기능을 제공하는 매크로나 함수가 있지만, 학습 목적에서는 이처럼 직접 함수를 구현해 보는 것이 프로그래밍 논리를 익히는 데 큰 도움이 됩니다.