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) → 한번 순회
반응형