나는 배열 크기를 받아 동적할당으로 배열을 생성하고, 수를 받을 때마다 max, min을 갱신하는 방법으로 문제를 풀었다. (초기 max, min은 배열[0] 요소로!)
다른 사람들 풀이를 보다가 sort() 함수로 오름차순 정렬을 해 max와 min을 출력한 답들이 있길래 c++ 라이브러리의 sort() 함수에 대해 알아보았다.
STL-sort()
함수에 관한 내용은 다음 글에!
이 글에는 여러가지 풀이를 정리해놓았다.
[풀이 1] : 동적할당
#include<iostream>
using namespace std;
int main(void)
{
cin.tie(NULL); ios_base::sync_with_stdio(false);
int n,max,min;
cin>>n;
int* arr=new int[n];
cin>>arr[0];
max=min=arr[0];
for(int i=1;i<n;i++)
{
cin>>arr[i];
if(max<arr[i]) max=arr[i];
if(min>arr[i]) min=arr[i];
}
cout<<min<<" "<<max;
delete[] arr;
return 0;
}
[풀이 2] : sort() 함수
#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
cin.tie(NULL); ios_base::sync_with_stdio(false);
int n;
cin>>n;
int arr[1000001];
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr, arr+n); //오름차순 정렬
cout<<arr[0]<<" "<<arr[n-1];
return 0;
}
🛑 주의
입력이 정수의 개수 N (1 ≤ N ≤ 1,000,000)이기 때문에, 배열 크기를 int arr[1000001];
만큼 생성해주어야한다.
예제가 5개만 사용해서 생각도 안하고 arr[100] 만큼만 했다가 런타임 에러 (OutOfBounds)
가 떴다. ^^;
[풀이 3] : 배열 사용하지 않기
#include<iostream>
using namespace std;
int main(void)
{
cin.tie(NULL); ios_base::sync_with_stdio(false);
int n, max, min,in, out;
cin>>n;
cin>>in;
max=min=in;
for(int i=1;i<n;i++)
{
cin>>in;
if(max<in) max=in;
if(min>in) min=in;
}
cout<<min<<" "<<max;
return 0;
}
[풀이 4] : vector 사용
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{
cin.tie(NULL); ios_base::sync_with_stdio(false);
int n,num;
cin>>n;
vector<int>arr;
for(int i=0;i<n;i++)
{
cin>>num;
arr.push_back(num);
}
sort(arr.begin(),arr.end()); //오름차순
cout<<arr.front()<<" "<<arr.back();
return 0;
}
sort()에는 첫번째/마지막 index
를 참조하는 arr.begin()
, arr.end()
를 넣어야하고,
출력은 첫번째/마지막 element
를 참조하는 arr.front()
, arr.back()
를 사용해야한다.!