[백준] 10818, <altorithm> 헤더를 활용한 최소, 최대 구하기

YUN·2026년 2월 19일

C++

목록 보기
27/82

위의 문제의 경우 2가지 풀이 방법이 존재한다.

(1) 배열에 전부 넣어서 정렬
(2) 배열에 넣지않고 정수 입력 받을때, 그때그때 최소,최댓값 갱신

1. 풀이

(1) 배열에 전부 넣어서 정렬

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;
}

(2) 배열에 넣지않고 그때그때 최소, 최댓값 갱신

이 방법은 입력값을 받을때마다 그때그때 최소, 최댓값을 갱신하는 방법으로 배열정렬을 사용하지않는다.

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);
    
}

2. 성능 비교

위의 방법이 (1) 이고 아래의 방법이 (2)다.

확실히 (2)가 더욱 빠르게 실행되는 것을 확인할 수 있다.

3. 느낀점

C++ 코테에서 최소, 최대 찾는 문제에는 주로 <algorithm> 헤더의

  • max(a, b) 또는 sort(배열의 첫 주소, 배열의 끝 주소)

가 사용된다.

매우 많이 등장하는 함수이지 까먹으면 안된다.

참고로 max(a,b)의 경우<-- 인자로 전달하는 a,b가 숫자 자료형이어야하고, 두 자료형이 같기만하면된다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글