(Silver4) 백준 1026 보물 (JavaScript, Node.js)

Adrian·2023년 2월 3일
0

PS

목록 보기
9/25
post-thumbnail

문제 링크

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

문제

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 S의 최솟값을 출력한다.

예제 1 입력

5
1 1 1 6 0
2 7 8 3 1

예제 1 출력

18

예제 2 입력

3
1 1 3
10 30 20

예제 2 출력

80

예제 3 입력

9
5 15 100 31 39 0 0 3 26
11 12 13 2 3 4 5 9 1

예제 3 출력

528

풀이 과정

  • 머리가 아파서 기분전환용으로 푼 쉬운 문제
  • 첫째줄 배열 오름차순, 두번째 줄 배열은 내림차순하여 계산하고, 역순으로 한 번더 계산하여 두 값을 비교한 뒤 더 작은 값을 출력한다.

정답 코드

const fs = require('fs');
const root = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const [[a], Arr1, Arr2] = fs.readFileSync(root, 'utf8').toString().trim().split('\n').map(a=> a.split(' ').map(a=>+a));

console.log(solution(a, Arr1, Arr2));

function solution(a, Arr1, Arr2) {
    let temp1 = 0;
    let temp2 = 0; 
    Arr1.sort((a,b)=> a-b);
    Arr2.sort((a,b)=> b-a);
    for(let i = 0; i < a; i++ ){
        temp1 += Arr1[i] * Arr2[i]
    }
    Arr1.sort((a,b)=> b-a);
    Arr2.sort((a,b)=> a-b);
    for(let i = 0; i < a; i++ ){
        temp2 += Arr1[i] * Arr2[i]
    }
    return temp1 >= temp2 ? temp2 : temp1 ; 
};
profile
관조, 사유, 끈기

0개의 댓글