-
[Python] 10818번: 최소, 최대 (최솟값, 최댓값 구하기)Coding Test/백준 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) → 한번 순회
'Coding Test > 백준' 카테고리의 다른 글
[Python] 11021번: A+B -7 (0) 2025.02.19 [Python] 2439번 : 별 찍기 - 2 (0) 2025.02.18 [Python] 25314번 : 코딩은 체육과목 입니다 (0) 2025.02.09 [Python] 25304번 : 영수증 (1) 2025.02.06 [Python] 2480번: 주사위 세개 (1) 2025.01.26