본문 바로가기
알고리즘/Baekjoon

[Python] 10818번 최소, 최대 - 백준

by Jun Shim 2021. 10. 4.
728x90

최소, 최대

 

10818번: 최소, 최대

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

www.acmicpc.net

1차원 배열

 

문제

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

 

입력

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

출력

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

예제 입력 1

5
20 10 35 30 7

예제 출력 1

7 35


 

Python 풀이

풀이 1

 

로그인

 

www.acmicpc.net

10818 python 1등

 

import sys
a = [int(s) for s in sys.stdin.read().split()[1:]]
print(min(a), max(a))

 

모든 입력을 분리시킨 후 두번째 자리부터 int로 변환해준다. 그리고 python 내장함수인 min, max로 최대, 최소를 가져와 출력한다.

 

가장 간단하고 빠른 방법이다.

 

풀이 2

 

로그인

 

www.acmicpc.net

 

import sys
a = sorted(int(s) for s in sys.stdin.read().split()[1:])
print(a[0], a[-1])

 

이 방법은 정렬을 시켜준 뒤에 맨 앞과 맨 뒤의 자료를 출력한다.

 

이 방법도 간단하지만 이 문제에서는 [풀이 1] 보다 상대적으로 느리다.

 

풀이 3

 

로그인

 

www.acmicpc.net

 

import sys, heapq as hq
a = [int(s) for s in sys.stdin.read().split()[1:]]
hq.heapify(a)
print(*hq.nsmallest(1, a), *hq.nlargest(1, a))

 

마지막으로 Python 기본 모듈인 heapq를 사용하는 방법이다. 우선순위 큐 알고리즘이라고도 하는 힙(heap) 큐 알고리즘은 이진 트리로 정렬하여 최소값을 빠르게 가져온다.

 

이 문제에서는 최대값도 요구하기에 [풀이 1]보다 느린 속도를 보여준다.

 

728x90

댓글