프로그래밍/재미난 C언어

[정올문제풀이] [배열] 유형1 - 최대값 최소값 구하기

예영교육연구소 2016. 3. 11. 11:49

/*

================================================= 

[배열] 유형1 - 최대값 최소값 구하기

===================================

이 유형의 문제는 정보올림피아드 & 알고리즘 사이트 기초다지기

560,561이 해당됩니다.


* 풀이 방식에는 여러가지 방법이 있습니다. 아래 방법은 풀이중에 하나입니다.

더 좋은 방법이 있을 수 있습니다.^^


(문제) 5개의 정수를 입력받아, 이 중의 최소값과 최대값을 구해보자.

(단 입력받는 값은 -9999~9999 사이의 수라고 가정한다.)

*/


단계별로 나누어보면 다음과 같다. 

1단계 5개의 정수를 입력받는다.(배열에 값을 저장)

2단계 최소값과 최대값을 구하는 처리 추가(이때 if문 이용 100넘는수는 제외)

3단계 최소값과 최대값 출력


[1단계]  5개의 정수를 입력

먼저 5개의 정수를 입력받는다. 

이 경우는 일정 구간을 반복처리가 가능한 for문을 이용하여 정해진 수만큼의

정수를 입력받을 수 있다. 아래 처리를 이용하여 i는 0부터 4까지 변하며

5번의 반복처리를 하게 될 것이다. 즉 scanf문을 통해 5번 값을 입력받아,

배열 arr[i]에 저장하게 된다.


for문의 실행이 끝나게 되면 arr[0] ~ arr[4]의 배열 공간에 키보드를 

통해 입력한 값이 저장되게 된다.



[소스 코드]


 

#include <stdio.h>


int main(void)

{

int i;

int arr[5];  // 입력받는 정수값 저장.


printf("5개의 정수 입력(a b c d e) :");

//1단계 5개의 정수를 입력

for (i=0;i<5;i++)

scanf(" %d", &arr[i]);


return 0;

}



2단계 최소값과 최대값 구하기


최대값과 최소값을 마지막에 구하기 위해서는 변수를 만들자.

여기서는 max와 min 변수를 만들것이다. 

참고로 변수는 어떤 임의의 값을 저장하는 공간이다.


이를 생성하여 배열의 각각의 값들을 비교하면서 마지막에는 max에 최대값을

min에는 최소값을 저장하게 될 것이다.


처음 초기값으로 max에는 입력받은 어떤 값보다 작게 설정한다.

min의 초기값으로는 어떤 값보다 크게 설정해 둔다. 


여기서는 입력받는 수가 -9999~9999 사이의 수가 입력받는 것으로 가정하였다.


max, min은 나중에 반드시 입력받은 값 중에 하나를 최대값 또는 최소값으로 

가져야 한다. 따라서 가능한 max는 입력받는 어떤 값보다 작은 값으로

그리고 min는 입력받는 어떤 값보다도 큰 값으로 설정한다.


물론 다른 방법으로 할 수도 있지만 여기서는 이 방법을 사용할 것이다.


[소스 코드]


 

#include <stdio.h>


int main(void)

{

int i;

int arr[5];  // 입력받는 정수값 저장.

     

      // 입력받는 값보다 작거나 큰 수 초기값 설정

int max = -9999, min = 9999;  

//1단계 5개의 정수를 입력

for (i=0;i<5;i++)

scanf(" %d", &arr[i]);

//2단계 최소값과 최대값 구하기

for (i=0;i<5;i++)

{

// 최대값 구하기

if (max <= arr[i]) {

max = arr[i];

// 최소값 구하기

if (min >= arr[i]) {

min = arr[i];

}

}

return 0;

}




3단계 최소값과 최대값 출력

이제 출력해 보자.


[소스 코드]


 

#include <stdio.h>


int main(void)

{

int i;

int arr[5];  // 입력받는 정수값 저장.

int max = -9999, min = 9999;  // 입력받는 값보다 작거나 큰 수 초기값 설정

// 1단계 5개의 정수를 입력

for (i=0;i<5;i++)

scanf(" %d", &arr[i]);

// 2단계 최소값과 최대값 구하기

for (i=0;i<5;i++)

{

// 최대값 구하기

if (max <= arr[i]) {

max = arr[i];

// 최소값 구하기

if (min >= arr[i]) {

min = arr[i];

}

}

// 3단계 최소값과 최대값 출력

printf(" 최대값 : %d\n", max);

printf(" 최소값 : %d\n", min);

return 0;

}


여기서 정수 출력이므로 %d로 서식지정을 설정했고, 줄 바꿈을 하기 위해 '\n'을

넣었다. 

(%d와 \n에 대해 이해가 어렵다면 printf에 대해 학습을 해야 한다.)


자 그럼 다음과 같은 결과를 볼 수 있을 것이다.



(도전 과제) 

(1) 다섯개의 정수를 입력받는다. 이중에 10이상의 값 중에 최소값을 구하고,

10이하의 값 중에 최대값을 구하여라.

(Hint. if문을 이용하여 최대값 최소값 처리시에 해당하는 값만 비교하도록 하면 된다.)


(2) 다섯개의 정수를 입력받는다. 이중에 짝수중의 최대값과 홀수중의 최소값을 구하여라.



If any of you lacks wisdom, 

you should ask God,

who gives generously to all without finding fault,

and it will be given to you.( James 1:5)