[BOJ] #20053 - 최소, 최대 2

👻 최소, 최대 2

👉🏻 문제 보러가기 👈🏻


🌱 문제

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

  • 시간 제한 : 1초
  • 메모리 제한 : 256 MB

🌱 입력

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다.
각 테스트 케이스의 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.


🌱 출력

각 테스트 케이스마다 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 한 줄에 하나씩 차례대로 출력한다.


🌱 예제


🪐 입출력 1

  • 입력
    3
    5
    20 28 22 25 21
    5
    30 21 17 25 29
    5
    20 10 35 30 7
    
  • 출력
    20 28
    17 30
    7 35
    

👻 풀이

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    // 최소, 최대 2
    int t, n;
    scanf(" %d", &t);
    while (t--)
    {
        scanf(" %d", &n);
        int num[n];
        for (int i = 0; i < n; i++)
            scanf(" %d", &num[i]);

        sort(num, num + n);

        printf("%d %d\n", num[0], num[n - 1]);
    }
    
    return 0;
}
  • 시간 : 736 ms
  • 메모리 : 5800 KB

👻 글을 마치며

시간, 메모리 커트라인에 거의 가깝게 소요되었다. 이런 코드는 손에 꼽는 것 같다. 시간이 적게 걸린 다른 코드를 살펴보니 배열에 담지 않고 입력 받을 때마다 대소를 비교하여 저장하였다. 나는 배열에 저장하고 아무래도 모든 데이터를 건드리는 sort 함수를 사용했기 때문에 시간이 오래 걸린 것 같다. 이런 부분은 바로바로 생각할 수 있도록 연습이 필요할 것 같다.


소스코드 보러가기

Categories:

Updated:

Leave a comment