ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.