본문 바로가기
백준

[백준] 1026번 : 보물 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 9. 20.
728x90
반응형

 

 

1026번: 보물

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 각 배열의 원소를 순서대로 곱하고 더했을 때 그 값이 최소가 되는 값을 구하는 문제이다.

어떤 값을 곱하고 더한 결과가 최소가 되려면 한 배열은 최솟값부터, 다른 배열은 최댓값부터 시작하여 각 배열의 최솟값과 최댓값을 곱하고 더해야 한다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 각 배열의 원소 개수를 입력받는다. N = int(sys.stdin.readline())
  3. 각 배열의 원소를 한 줄에 입력받아 리스트로 저장한다. A = list(map(int, sys.stdin.readline().split()))
  4. B = list(map(int, sys.stdin.readline().split()))
  5. 각 원소의 곱의 합이 최소가 되려면 각 배열의 최솟값과 최댓값을 곱한 결과를 합해야 한다. 하여 한 배열을 오름차순으로 정렬하고 A.sort()
  6. 나머지 다른 배열을 내림차순으로 정렬한다. B.sort(reverse=True)
  7. 최종 연산한 값을 저장할 변수를 생성하고 초기화한다. answer = 0
  8. 원소의 개수만큼 반복하며 for i in range(N)
  9. 각 배열의 원소를 순서대로 곱하고 그 결과를 계속적으로 더해준다. answer += A[i] * B[i]
  10. 그렇게 구한 최솟값을 출력한다. print(answer)
반응형

3. 소스코드

import sys

N = int(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)

answer = 0
for i in range(N):
    answer += A[i] * B[i]

print(answer)
728x90
반응형