
위의 문제의 경우 2가지 풀이 방법이 존재한다.
(1) 배열에 전부 넣어서 정렬
(2) 배열에 넣지않고 정수 입력 받을때, 그때그때 최소,최댓값 갱신
C++에서 배열의 정렬 기능을 사용하기 위해서는 <algorithm> 헤더의
sort(배열의 첫 주소, 배열의 끝 주소) //배열을 오름차순으로 정렬
함수를 사용해야한다.
이때 주의할점이 배열의 끝 주소는 배열의 마지막 요소의 주소가 아니라 진짜로 배열의 끝 주소를 의미한다.
예를들어 크기가 100인 배열 arr 을 오름차순 정렬하는 경우
sort(arr+0, arr+100);
//arr+99가 마지막 요소의 주소이나, 배열의 진짜 끝 주소는 arr+100 이다
을 해줘야한다.
//최종 코드
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
int arr[N] = {};
for(int i=0; i<N; i++) cin >> arr[i];
sort(arr+0, arr+N);
cout << arr[0] << " " << arr[N-1];
return 0;
}
이 방법은 입력값을 받을때마다 그때그때 최소, 최댓값을 갱신하는 방법으로 배열과 정렬을 사용하지않는다.
C++ sort() 의 시간 복잡도는 O(NlogN) 이라 (1) 보다는 지금 배우는 (2)가 더욱 빠르다.
이 방법의 주의할 점은, 최소,최댓값의 초기값을 가지고 들어가야하는데,
그 초기값을 주어진 정수 범위 바깥의 수로 잡아야한다.
그래야 정상적인 비교가 가능하다.
//최종 코드
#include <stdio.h>
int main() {
int N;
int min_temp = 1000001;
int max_temp = -1000001;
int temp;
scanf("%d", &N);
for(int i=0; i<N; i++) {
scanf("%d", &temp);
if(min_temp > temp) min_temp=temp;
if(max_temp < temp) max_temp=temp;
}
printf("%d %d", min_temp, max_temp);
}


위의 방법이 (1) 이고 아래의 방법이 (2)다.
확실히 (2)가 더욱 빠르게 실행되는 것을 확인할 수 있다.
C++ 코테에서 최소, 최대 찾는 문제에는 주로 <algorithm> 헤더의
max(a, b) 또는 sort(배열의 첫 주소, 배열의 끝 주소) 가 사용된다.
매우 많이 등장하는 함수이지 까먹으면 안된다.
참고로 max(a,b)의 경우<-- 인자로 전달하는 a,b가 숫자 자료형이어야하고, 두 자료형이 같기만하면된다.