[BOJ] 1026 : 보물
Question
Solution
- 최솟값을 만드려면 (큰 수x작은 수)가 되어야 한다.
- B의 원소를 확인하여 A를 배열해준다
- A와 B에서 최대, 최솟값을 연산하고 빼낸다
Cord
C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main()
{
int answer = 0;
int length;
length = int.Parse(Console.ReadLine());
string[] inputArrA = Console.ReadLine().Split();
int[] numsArrA = Array.ConvertAll(inputArrA, int.Parse);
List<int> numsListA = numsArrA.ToList();
string[] inputArrB = Console.ReadLine().Split();
int[] numsArrB = Array.ConvertAll(inputArrB, int.Parse);
List<int> numsListB = numsArrB.ToList();
for (int idx = 0; idx < length; idx++)
{
int a = numsListA.Min();
int b = numsListB.Max();
answer += (a * b);
numsListA.Remove(a);
numsListB.Remove(b);
}
Console.WriteLine(answer);
}
}
}
C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int answer = 0;
int length;
cin >> length;
vector<int> numsA(length);
for (int idx = 0; idx < length; idx++)
{
cin >> numsA[idx];
}
vector<int> numsB(length);
for (int idx = 0; idx < length; idx++)
{
cin >> numsB[idx];
}
for (int idx = 0; idx < length; idx++)
{
answer += ((*min_element(numsA.begin(), numsA.end())) *
(*max_element(numsB.begin(), numsB.end())));
numsA.erase(min_element(numsA.begin(), numsA.end()));
numsB.erase(max_element(numsB.begin(), numsB.end()));
}
cout << answer;
return 0;
}
Result
What`s new
C#
min_element() : 자료구조에서 최솟값의 주소를 반환
max_elemnt() : 자료구조에서 최댓값의 주소를 반환
vector.erase() : 자료구조에서 주소를 받아 해당 인수를 제거
C++
Array.ConvertAll() : 배열을 한번에 형변환 시켜 줌