• 2023. 6. 20.

    by. 문익점

    반응형

    안녕하세요! 이번에는 파이썬을 이용하여 백준 알고리즘 문제 중 하나인 "최솟값"을 해결해 보겠습니다. "최솟값" 문제는 주어진 수열에서 최솟값을 구하는 문제입니다. 이제부터 문제의 내용과 해결 방법에 대해 자세히 알아보도록 하겠습니다.

     

    바로 아래 정보에서 공부해봅시다!

    백준 알고리즘 로고
    백준 알고리즘 로고

    문제 내용

    주어진 수열에서 최솟값을 구하는 문제입니다. 입력으로는 수열의 길이 **n**과 **n**개의 숫자가 주어집니다. 이 중에서 최솟값을 구해야 합니다.

    위의 문제 내용을 기반으로 주어진 코드를 분석하고, 문제를 해결하는 방법에 대해 알아보겠습니다.

    문제 이해하기

    주어진 코드는 주어진 수열에서 최솟값을 구하는 로직을 담고 있습니다. 코드를 통해 수열과 최솟값을 구하는 방식을 확인할 수 있습니다. 이제부터 코드를 분석하면서 자세한 내용을 확인해보겠습니다.

    풀이 코드

    pythonCopy code
    import sys
    from heapq import heappush, heappop, heapify
    
    n = int(input())
    
    min_heap = list(map(int, sys.stdin.readline().split()))
    heapify(min_heap)
    
    for _ in range(n - 1):
        for num in map(int, sys.stdin.readline().split()):
            if min_heap[0] < num:
                heappop(min_heap)
                heappush(min_heap, num)
    
    print(min_heap[0])
    
    

    풀이 방법

    주어진 코드에서 최솟값을 구하는 방법은 다음과 같습니다.

    1. 입력 받기
      • **n**을 입력받습니다. 이는 수열의 길이를 나타냅니다.
      • min_heap 리스트를 입력받고, 이를 최소 힙으로 변환합니다.
    2. 최솟값 구하기
      • **(n - 1)**번 반복하는 루프를 실행합니다. 이는 첫 번째 원소를 이미 힙으로 변환했기 때문입니다.
      • 매 반복마다 새로운 숫자들을 입력받습니다.
      • 입력받은 숫자들을 순회하면서, 현재 최소 힙의 최솟값보다 큰 수라면, 최소 힙의 최솟값을 제거하고, 새로운 숫자를 최소 힙에 추가합니다.
    3. 결과 출력
      • 최소 힙의 첫 번째 원소인 최솟값을 출력합니다.

    이를 통해 주어진 수열에서 최솟값을 구할 수 있습니다.

    시간 복잡도

    해당 알고리즘의 시간 복잡도는 O(n log n)입니다. 이는 수열의 길이인 **n**에 대해 최소 힙을 구성하는 과정에서 O(n)이 소요되고, **(n - 1)**번의 반복문을 수행하는 과정에서 O(n log n)이 소요되기 때문입니다.

    이상으로 파이썬을 이용한 백준 알고리즘 "최솟값" 해설을 마치도록 하겠습니다. 코드를 통해 주어진 수열에서 최솟값을 구하는 방법을 알아보았고, 시간 복잡도를 분석해 보았습니다. 다른 문제에 대한 해설이 필요하신 경우 언제든지 말씀해주세요. 감사합니다!

     

    백준이 너무 어렵다면 아주 기본 코딩테스트 알고리즘을 먼저 도전해보세요~

     

    👉 기본 코딩테스트 문제보기

     

     

    혹시 문제가 잘 안풀리고 답답하신가요? 아래를 눌러 백준 알고리즘 트랜드와 기출문제를 알아보세요! 이것만 알아도 네카라뿌십니다~

     

    👉 백준 알고리즘 모음

    반응형