난이도 : 실버 5
소요시간 : 30분
// 입력
const [N, M, K] = input[0].split(' ').map(Number);
// 브실이가 수강한 과목과 점수
const subjects = input.slice(1, N + 1).map((subject) => subject.split(' '));
// 브실대에서 공개한 과목
const publicSubjects = input.slice(N + 1, N + K + 1);
let subjectMap = new Map();
subjects.forEach(([s, p]) => {
subjectMap.set(s,+p);
});
// 공개된 과목의 점수를 합산하고 subjectMap에서 제거
let openSubjectScore = 0;
publicSubjects.forEach((t) => {
openSubjectScore += subjectMap.get(t);
subjectMap.delete(t);
});
// 남은 과목들의 점수를 오름차순으로 정렬
let remainingSubjects = Array.from(subjectMap.values()).sort((a, b) => a - b);
let minScore = 0, maxScore = 0;
// 남은 과목에서 최솟값과 최댓값 계산
for (let i = 0; i < M - K; i++) {
minScore += remainingSubjects[i];
maxScore += remainingSubjects[remainingSubjects.length - 1 - i];
}
// 최종 결과 출력
console.log(openSubjectScore + minScore, openSubjectScore + maxScore);
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().split('\n');
//입력
const [N, M, K] = input[0].split(' ').map(Number);
//브실이가 수강한 과목과 점수
const subjects = input.slice(1, N+1).map((subject) => subject.split(' '));
// console.log(subjects);
//브실대에서 공개한 과목
const publicSubjects = input.slice(N+1, N+K+1);
// 브실이의 입시전략
let subjectMap = new Map();
subjects.forEach(([s, p]) => {
subjectMap.set(s, +p);
});
// publicSubjects 배열을 순회하면서 공개된 과목의 점수를 합산합니다.
// 공개된 과목의 점수를 subjectMap에서 가져와 openSubjectScore에 더하고,
// 해당 과목을 subjectMap에서 삭제합니다.
let openSubjectScore = 0;
publicSubjects.forEach((t) => {
openSubjectScore += subjectMap.get(t);
subjectMap.delete(t);
});
// 남은 과목들의 점수를 오름차순으로 정렬하고, 가장 낮은 점수부터 가장 높은 점수까지 더해줍니다.
let remainingSubjects = Array.from(subjectMap.values()).sort((a, b) => a - b);
let minScore = 0, maxScore = 0;
for (let i = 0; i < M - K; i++) {
minScore += remainingSubjects[i];
maxScore += remainingSubjects[remainingSubjects.length - 1 - i];
}
console.log(openSubjectScore + minScore, openSubjectScore + maxScore);