CodingTest/BeakJoon

[10818] 최솟값, 최댓값

the.Dev.Cat 2026. 3. 10. 12:58

 

최솟값 최댓값

백준 Bronze III | 10818 | Python | 문제 링크


문제 설명

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

입력

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

입출력 예

입력 출력
5
20 10 35 30 7
7 35

나의 풀이

풀이 1

n = int(input())
nums = list(map(int, input().split()))
nums.sort()

print(nums[0], nums[-1])

정렬 후 첫 번째 원소가 최솟값, 마지막 원소가 최댓값이다.

풀이 2

import sys
input = sys.stdin.readline

n = int(input())
nums = list(map(int, input().split()))
nums.sort()
print(nums[0], nums[-1])

풀이 1과 동일한 방식이지만 sys.stdin.readline으로 입력 속도를 개선했다. N이 최대 1,000,000이므로 입력량이 많을 때 유효하다.

풀이 3

import sys
input = sys.stdin.readline

n = int(input())
nums = list(map(int, input().split()))
print(min(nums), max(nums))

정렬 없이 내장 함수 min(), max()로 바로 구한다. 정렬의 O(N log N) 대신 O(N) 순회로 처리한다.

풀이 4

import sys
input = sys.stdin.readline

n = int(input())
nums = list(map(int, input().split()))

min_val, max_val = nums[0], nums[0]
for idx in range(n):
  if nums[idx] > max_val:
    max_val = nums[idx]
  if nums[idx] < min_val:
    min_val = nums[idx]

print(min_val, max_val)

min(), max() 없이 직접 순회하며 최솟값과 최댓값을 갱신한다. 내장 함수 없이 동일한 O(N) 로직을 구현한 것으로, 알고리즘 원리를 직접 표현한 풀이다.