개발 공부/알고리즘 문제풀이

[백준] 10818. 최소, 최대(476ms)

5묘 2022. 7. 15. 23:03
 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net


# 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 함수를 사용하는 방법이긴 한데, 정렬을 사용한다면 훨씬 더 빠르게 최솟값, 최댓값을 찾아낼 수 있지 않을까 싶다. 버블정렬, 선택정렬, 퀵정렬 같은 정렬 문제를 풀어보고 다시 이 문제로 돌아와서 풀어봐야지!