멋쟁이 개발자의 블로그

[C/백준 10818] 최소, 최대 본문

Language/C

[C/백준 10818] 최소, 최대

y_MIN 2021. 3. 17. 15:40

문제: N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

입력: 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력: 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

#include <stdio.h>

int main(void) {
	int n, max = -1000000, min = 1000000, num = 0;
	scanf_s("%d", &n);

	for (int i = 0;i < n;i++) {
		scanf_s("%d", &num);

		if (max <= num)
			max = num;

		if (min >= num)
			min = num;
	}
	printf("%d %d", min, max);

	return 0;
}

 

[틀린 코드]

// 틀린 코드
#include <stdio.h>

int main(void) {
	int n, max = 0, min = 0;
	scanf_s("%d", &n);
	int arr[n];

	for (int i = 0;i < n;i++) {
		scanf_s("%d", arr[n]);

		if (max <= arr[n])
			max = arr[n];

		if (min >= arr[n])
			min = arr[n];
	}
	printf("%d %d", min, max);

	return 0;
}

1. 배열 문제라서 배열의 크기를 입력 받아 int arr[n]; 으로 초기화 하려고 했는데 그 줄에서 오류가 났다. 변수 n 값을 상수로 사용할 수 없다고 .. 그래서 n의 최댓값이 1,000,000이니까 int arr[1000001]; 으로 적었는데 찾아보니 스택 영역에서 제한을 받아서 안됐다. 그래서 배열 사용 포기 !

2. 문제의 조건 때문에 max와 min을 0으로 초기화 하면 안되고 max=-1000000, min=1000000으로 초기화해야 했다.