Coding Test/백준

[Python] 10818번: 최소, 최대 (최솟값, 최댓값 구하기)

jam3317 2025. 2. 11. 23:33
반응형

최소, 최대

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 428536 195188 146718 44.367%

문제

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

 


 

첫번째 정답

#최댓값 최솟값

# 숫자를 몇개입력할지 입력
N = int(input())

# 입력한 숫자만큼 입력 후 배열에 저장
A = list(map(int, input().split()))

# 그중에 최대값 최솟값 출력
print(min(A))
print(max(A))

 

 

 

GPT의 답은?

 

# 숫자의 개수 입력
N = int(input())

# N개의 정수를 리스트로 입력받음
A = list(map(int, input().split()))

# 최솟값과 최댓값을 공백으로 구분하여 출력
print(min(A), max(A))

 

정답을 한줄로 출력되게 수정했다.

 

이 코드의 시간 복잡도는:

min(A)  O(N) 

max(A)  O(N) 

 

즉, 리스트의 크기가 커질 경우 두 번 순회해야 하므로 비효율적일 수 있음.

따라서, 한 번의 순회로 최솟값과 최댓값을 찾도록 최적화할 수도 있음.

 

최적화된 코드

# 숫자의 개수 입력
N = int(input())

# 첫 번째 값으로 초기값 설정
A = list(map(int, input().split()))

# 변수 초기화
min_val, max_val = A[0], A[0]

# 리스트를 한 번만 순회하며 최솟값, 최댓값 찾기
for num in A:
    if num < min_val:
        min_val = num
    if num > max_val:
        max_val = num

# 최솟값과 최댓값 출력
print(min_val, max_val)

 

min()max()를 두 번 호출하는 대신, 리스트를 한 번만 순회하여 최솟값과 최댓값을 동시에 찾음.

 

시간 복잡도:  O(N)  → 한번 순회

반응형