본문 바로가기

Computer Engineering/Data Structures Using C

[C언어 자료구조] 01-1. 알고리즘이란?

반응형

세 값의 최댓값

 

#include <stdio.h>

int main(void)
{
	int a, b, c;
	int max;
	printf("세 정수의 최댓값을 구합니다.\n");
	printf("a의 값 :");
	printf("b의 값 :");
	printf("c의 값 :");
	scanf_s("%d", &a);
	scanf_s("%d", &b);
	scanf_s("%d", &c);

	max = a;

	if (b > max)
		max = b;
	if (c > max)
		max = c;

	printf("최댓값은 %d입니다. \n", max);

	return 0;

}

최댓값을 구하는 과정

  1. max에 a값을 넣는다.
  2. b값이 max보다 크면 max에 b값을 넣는다.
  3. c값이 max보다 크면 max에 c값을 넣는다.

여러 값에 대해서 최댓값을 구하는 방법 

#include <stdio.h>

int max3(int a, int b, int c)
{
	int max = a;
	if (b > max)
		max = b;
	if (c > max)
		max = c;

	return max;
}

int main(void)
{
	printf("max3(%d,%d,%d) = %d\n", 3, 2, 1, max3(3, 2, 1)); //A
	printf("max3(%d,%d,%d) = %d\n", 3, 2, 2, max3(3, 2, 2)); //B
	printf("max3(%d,%d,%d) = %d\n", 3, 1, 2, max3(3, 1, 2)); //C
	printf("max3(%d,%d,%d) = %d\n", 3, 2, 3, max3(3, 2, 3)); //D
	printf("max3(%d,%d,%d) = %d\n", 2, 1, 3, max3(2, 1, 3)); //E
	printf("max3(%d,%d,%d) = %d\n", 3, 3, 2, max3(3, 3, 2)); //F
	printf("max3(%d,%d,%d) = %d\n", 3, 3, 3, max3(3, 3, 3)); //G
	printf("max3(%d,%d,%d) = %d\n", 2, 2, 3, max3(2, 2, 3)); //H
	printf("max3(%d,%d,%d) = %d\n", 2, 3, 1, max3(2, 3, 1)); //I
	printf("max3(%d,%d,%d) = %d\n", 2, 3, 2, max3(2, 3, 2)); //J
	printf("max3(%d,%d,%d) = %d\n", 1, 3, 2, max3(1, 3, 2)); //K
	printf("max3(%d,%d,%d) = %d\n", 2, 3, 3, max3(2, 3, 3)); //L
	printf("max3(%d,%d,%d) = %d\n", 1, 2, 3, max3(1, 2, 3)); //M

	return 0;
}

 

여러번 반복해서 구하는 경우에는 함수로 처리하기

세 값 a, b, c의 대소 관계를 나열한 결정 트리

 

알고리즘이란

문제를 해결하기 위한 명확하게 정의되고 순서가 있는 유한 개의 규칙으로 이루어진 집합

 

 

세 값의 중앙값

#include <stdio.h>

int med3(int a, int b, int c)
{
	if (a >= b)
		if (b >= c)
			return b;
	//a>b>c, a>b=c, a=b>c, a=b=c
		else if (a <= c)
			return a;
	//a=c>b, c>a>b, c>a=b
		else
			return c;
	//a>c>b
	else if (a > c)
		return a;
	//b>a>c
	else if (b > c)
		return c;
	//b>a=c, b>c>a
	else
		return b;
	//b=c>a, c>b>a
}

int main(void)
{
	int a, b, c;

	printf("세 정수의 중앙값을 구합니다.\n");
	printf("a의 값 :"); scanf_s("%d", &a);
	printf("b의 값 :"); scanf_s("%d", &b);
	printf("c의 값 :"); scanf_s("%d", &c);

	printf("중앙값은 %d입니다. \n", med3(a, b, c));

	return 0;
}

세 값의 대소관계를 모두 파악해야 하기 때문에 중앙값을 구하는 절차는 매우 복잡하다.

 

 


조건 판단과 분기

#include <stdio.h>

int main(void)
{
	int n;

	printf("정수를 입력하세요. :");
	scanf_s("%d", &n);
	if (n > 0)
		printf("이 수는 양수입니다.\n");
	else if (n < 0)
		printf("이 수는 음수입니다.\n");
	else
		printf("이 수는 0입니다.\n");

	return 0;
}

 

  1. n이 0보다 큰경우
  2. n이 0보다 크지 않고 n이 0보다 작은경우
  3. n이 0보다 크지 않고 n이 0보다 작지도 않은 경우 (= 0인 경우)

 

반응형