# 10818 최소, 최대
import sys
N = int(input())
arr = list(map(int, sys.stdin.readline().rstrip().split()))
# 처음부터 다 찾는 방법(476ms)
min_num = 10000001
max_num = -2000000
for i in arr:
if i > max_num:
max_num = i
if i < min_num:
min_num = i
print('{} {}'.format(min_num, max_num))
# 더 빠른 방법은 없을까?
# 1. 절반으로 나눠서 min, max 각각 찾고 두 종류 비교하면? - 이게 더 시간 걸린다.(576ms)
import sys
N = int(input())
arr = list(map(int, sys.stdin.readline().rstrip().split()))
# 처음부터 다 찾는 방법
min_num_1 = min_num_2 = 10000001
max_num_1 = max_num_2 = -2000000
for i in range(0, N//2):
if arr[i] > max_num_1:
max_num_1 = arr[i]
if arr[i] < min_num_1:
min_num_1 = arr[i]
for i in range(N//2, N):
if arr[i] > max_num_2:
max_num_2 = arr[i]
if arr[i] < min_num_2:
min_num_2 = arr[i]
if min_num_1 <= min_num_2:
min_num = min_num_1
else:
min_num = min_num_2
if max_num_1 >= max_num_2:
max_num = max_num_1
else:
max_num = max_num_2
print('{} {}'.format(min_num, max_num))
# 2. max, min 쓴다면? - 아까보다 빨라졌음.(424ms)
import sys
N = int(input())
arr = list(map(int, sys.stdin.readline().rstrip().split()))
print('{} {}'.format(min(arr), max(arr)))
이 문제는 3가지 방식으로 테스트를 해봤다.
1) 반복문을 한번 돌면서, 최솟값과 최댓값을 찾는 방법 ,
2) 배열을 두 개로 나누고, 두 배열 각각에서 1)처럼 최댓값, 최솟값을 찾아 둘을 비교해 찾아내는 방법,
3) 파이썬 내장함수 max, min 함수를 사용하는 방법.
셋 중 일단 가장 빠른 건 max, min 함수를 사용하는 방법이긴 한데, 정렬을 사용한다면 훨씬 더 빠르게 최솟값, 최댓값을 찾아낼 수 있지 않을까 싶다. 버블정렬, 선택정렬, 퀵정렬 같은 정렬 문제를 풀어보고 다시 이 문제로 돌아와서 풀어봐야지!
'개발 공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 2577. 숫자의 개수 (0) | 2022.07.17 |
---|---|
[백준] 2562. 최댓값 (0) | 2022.07.17 |
[백준] 1110. 더하기 사이클 (0) | 2022.07.15 |
[백준] 10952 A+B - 5, # 10951 A+B - 4 (0) | 2022.07.15 |
[백준] 10871. X보다 작은 수 (0) | 2022.07.15 |