PS/백준

[ 백준 ] 1026번 : 보물 - (C++/C, JAVA/자바, PYTHON/파이썬)

발효홍삼 2022. 2. 28. 03:03
728x90
  • 문제

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

 

1026번: 보물

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

www.acmicpc.net


  • 풀이법 ( 알고리즘 )

최솟값을 만들어야하기 때문에 정수 배열 A에서 가장 작은 값과 정수 배열 B에서 가장 큰 값끼리 곱한 후 답을 저장하는 변수에 더한다. 이를 반복한다.


  • 풀이법 - C++ ( C )
더보기
#include <iostream>
#include <algorithm>

using namespace std;

int n; // n : 정수 배열 A, B의 길이 
int A[101], B[101]; // A[x] : 정수 배열 , B[x] : 정수 배열

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//input
	cin >> n;

	for (int i = 0; i < n; i++)
		cin >> A[i];

	for (int i = 0; i < n; i++)
		cin >> B[i];

	//solve
	sort(A, A + n);
	sort(B, B + n);

	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += A[i] * B[n - i - 1];
	}

	//output
	cout << sum;
	return 0;
}
  • 풀이법 - JAVA
더보기
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int[] A = new int[n];
		int[] B = new int[n];
		
		for(int i = 0; i < n; i++)
			A[i] = sc.nextInt();
		
		for(int i = 0; i < n; i++)
			B[i] = sc.nextInt();
		
		Arrays.sort(A);
		Arrays.sort(B);
		
		int sum = 0;
		for(int i = 0; i < n; i++)
		{
			sum += A[i] * B[n-i-1];
		}
		
		System.out.println(sum);
	}
}
  • 풀이법 - PYTHON
더보기
n = int(input())

A = []
B = []

A = list(map(int, input().split()))
B = list(map(int, input().split()))

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

sum  = 0

for i in range(n):
    sum += A[i] * B[i]
print(sum)

 

728x90