BOJ/백준-1026-python

cosmos·2021년 4월 26일
2
post-thumbnail

문제📖

풀이🙏

  • 첫째 줄에 N이 주어진다.
  • 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다.
  • S = A[0]×B[0] + ... + A[N-1]×B[N-1]
  • S의 값을 가장 작게 만들기 위해 A의 수를 재배열하라.
  • 첫째 줄에 S의 최솟값을 출력하라.
    -> A 리스트의 각 요소와 B 리스트의 각 요소의 인덱스 번호에 맞춰 곱한값의 합인 경우의 수 중에서 최솟값을 구하면되는 문제이다.
    -> A를 오름차순 정렬, B를 내림차순 정렬한 다음에 zip함수를 이용해 두 리스트를 묶어주었고 sum함수를 이용해 리스트의 합을 구하였다.
    -> 다 푼 뒤, 다른 분들의 풀이를 확인해보니 뒤늦게 B에 있는 수는 재배열하면 안 된다는 조건을 확인하였다.
    -> 아래에 재배열하지 않고 푼 윤상ol님 블로그 글을 참고하겠다.
    -> 앞으로는 문제를 좀 더 꼼꼼히 확인하는 습관을 가져야겠다. 😇

코드💻

# boj, 1026 : 보물, python3
import sys

def bomul(A, B):
    return sum(a * b for a, b in zip(sorted(A), sorted(B, reverse = True)))


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


print(bomul(A, B))

최적코드

결과😎

출처 && 깃허브📝

https://www.acmicpc.net/problem/1026
github

0개의 댓글