알고리즘/Python

백준 알고리즘: 1026번 보물 (Python)

두넌 2023. 5. 30.

문제 정보


 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net

 

핵심


이 문제를 보자마자 생각한 해결방법은 A 배열과 B 배열을 각각 정렬하고, 최소 결과가 나와야되므로 두 배열 중 하나의 배열은 역으로 정렬하여 같은 인덱스의 요소끼리 곱해서 답을 출력하면 될것이라고 생각했다

실제 풀이해보니 해당 방식이 맞았고 그렇게 오래 걸리지도 않고 코드도 간결하게 풀이할 수 있었다

 

풀이


import sys

def sol():
    _ = sys.stdin.readline()

    A = list(map(int, sys.stdin.readline().split()))
    B = list(map(int, sys.stdin.readline().split()))

    A.sort()
    B.sort(reverse=True)

    result = 0
    for i in range(len(A)):
        result += (A[i] * B[i])

    print(result)

sol()

sort 에서 인자를 reverse=True 로 주면 역으로 정렬된다

를 이용해서 한 배열은 역으로 정렬하고, 한 배열은 정방향 정렬하여 같은 인덱스의 요소끼리 곱해주면 위 문제를 쉽게 풀이할 수 있다

 

고찰


 

딱히 어려운 점이 없었기 때문에 생략한다

 

참조


 

GitHub - dduneon/CodingTestPy

Contribute to dduneon/CodingTestPy development by creating an account on GitHub.

github.com

해당 깃허브의 baekjoon1026.py 를 참조하면 된다

댓글