https://www.acmicpc.net/problem/10818

 

수의 배열을 입력받고 최솟값과 최댓값을 출력해주면 되는 문제이다. 처음에 정렬한 다음 처음과 끝 값을 출력하려고 했는데 정렬이 nlogn의 시간이 걸리고 min max element를 출력해주는 함수는 n의 시간이 걸리기 때문에 더 효율적이라고 한다.

 

하지만 limits 라이브러리를 활용하여 배열을 사용하지 않고도 이 문제를 해결할 수도 있다. 이때 limits함수의 max min을 저장해두고 만약 더 큰값이나 더 작은 값이 있다면 이 값으로 변경해주면 된다.

 

정답코드(배열 사용)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> v(n);
    for (int i = 0;i < n;i++)
    {
        cin >> v[i];
    }

    cout << *min_element(v.begin(),v.end()) << " " << *max_element(v.begin(),v.end());

    return 0;
}

 

정답코드(limits 라이브러리 사용)

#include <iostream>
#include <limits>

using namespace std;

int main() {
    int n, num;
    cin >> n;

    int minVal = numeric_limits<int>::max();
    int maxVal = numeric_limits<int>::min();

    for (int i = 0; i < n; i++) {
        cin >> num;
        if (num < minVal) minVal = num;
        if (num > maxVal) maxVal = num;
    }

    cout << minVal << " " << maxVal << "\n";
    return 0;
}

+ Recent posts