최소, 최대 성공
1 초 | 256 MB | 183171 | 78736 | 60643 | 42.738% |
문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
예제 입력 1 복사
5
20 10 35 30 7
예제 출력 1 복사
7 35
<풀이 - 수정 전>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX 1000000
int main(void)
{
int arr[MAX] = { 0 };
int N, i;
int max, min;
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%d", &arr[i]);
min = arr[0];
max = arr[0];
for (i = 1; i < N; i++)
{
if (min > arr[i])
min = arr[i];
if (max < arr[i])
max = arr[i];
}
printf("%d %d", min, max);
return 0;
}
<풀이 - 수정 후>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int N, n, i;
int min = 1000000, max = -1000000;
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%d", &n);
if (n > max)
{
max = n;
}
if (n < min)
{
min = n;
}
}
printf("%d %d", min, max);
return 0;
}
<주의할 점>
배열을 사용하는 문제라고 해서 배열을 사용했더니 크기가 1,000,000인 배열은 스택사이즈 초과로 인해 오류를 일으켰고, 이래저래 문제가 많아서 그냥 배열을 사용하지 않는 문제로 만들어 보았다.