1 분 소요

Question

1026Q


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

1026Sharp

1026


What`s new

C#

min_element() : 자료구조에서 최솟값의 주소를 반환
max_elemnt() : 자료구조에서 최댓값의 주소를 반환
vector.erase() : 자료구조에서 주소를 받아 해당 인수를 제거

C++

Array.ConvertAll() : 배열을 한번에 형변환 시켜 줌