[BOJ] 10818_최소,최대 (STL - sort()함수)

gogori6565·2022년 7월 18일
0

나는 배열 크기를 받아 동적할당으로 배열을 생성하고, 수를 받을 때마다 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() 를 사용해야한다.!

문제 출처 : https://www.acmicpc.net/problem/10818

profile
p(´∇`)q

0개의 댓글