본문 바로가기

BAEKJOON/수학

백준 10818번 [최소, 최대](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 10818 [최소, 최대]


문제 링크: https://www.acmicpc.net/problem/10818

문제 설명:

주어진 N개의 정수에서 최솟값과 최댓값을 구하는 프로그램을 작성하세요.

입력 조건:

  • 첫째 줄에 정수 N이 주어집니다. (1 ≤ N ≤ 1,000,000)
  • 둘째 줄에는 N개의 정수가 공백으로 구분되어 주어집니다. 각 정수는 -1,000,000 이상 1,000,000 이하입니다.

출력 조건:

  • 첫째 줄에 최솟값과 최댓값을 공백으로 구분하여 출력합니다.

문제 해결 코드


#include <iostream>
#include <limits> // numeric_limits 사용을 위해 포함
using namespace std;

int main() {
    int n, x;
    cin >> n; // 입력 개수

    // 초기 최솟값과 최댓값 설정
    int min = numeric_limits<int>::max(); // int형 최댓값으로 초기화
    int max = numeric_limits<int>::min(); // int형 최솟값으로 초기화

    for (int i = 0; i < n; i++) {
        cin >> x; // 정수 입력
        if (x < min) min = x; // 최솟값 갱신
        if (x > max) max = x; // 최댓값 갱신
    }

    // 최솟값과 최댓값 출력
    cout << min << ' ' << max << endl;

    return 0; // 프로그램 정상 종료
}

코드 설명

위 코드는 N개의 정수를 입력받아 최솟값과 최댓값을 계산하여 출력합니다.

  • 입력 처리: `cin`을 사용하여 첫 번째로 입력 개수를 받고, 이후 N개의 정수를 반복적으로 입력받습니다.
  • 최솟값 및 최댓값 초기화: `numeric_limits`를 사용하여 int형의 최대값과 최소값으로 초기화합니다. 이를 통해 첫 번째 입력값에 관계없이 정확한 비교가 가능합니다.
  • 값 비교 및 갱신: 각 입력값을 읽으면서 최솟값과 최댓값을 확인하여 갱신합니다.
  • 출력: 갱신된 최솟값과 최댓값을 공백으로 구분하여 출력합니다.

시간 복잡도 분석:

  • 입력: N개의 정수를 입력받는 데 O(N).
  • 연산: 각 정수에 대해 최솟값 및 최댓값을 비교하는 데 O(N).
  • 출력: 한 번의 출력으로 O(1).

따라서 전체 시간 복잡도는 O(N)입니다.


결과

다음은 입력 예시와 출력 결과입니다:

입력:
5
20 10 35 30 7

출력:
7 35

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST