[백준 알고리즘] Node.js 12018. Yonsei TOTO
2023. 8. 30. 10:28ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/12018
12018번: Yonsei TOTO
첫째 줄에는 과목 수 n (1 ≤ n ≤ 100)과 주어진 마일리지 m (1 ≤ m ≤ 100)이 주어진다. 각 과목마다 2줄의 입력이 주어지는데 첫째 줄에는 각 과목에 신청한 사람 수 Pi과 과목의 수강인원 Li이 주어
www.acmicpc.net
2. 풀이
- 주어진 마일리지로 최대로 들을 수 있는 과목의 수를 구하는 문제이다.
- 마일리지가 같다면 우선순위가 주어진다고 하니, 수강인원 안에만 들어가게 하면 된다. 예를 들면 수강인원이 4명이라면 4번째로 큰 값과 동일하다면 된다는 의미이다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n");
let [n,m] = inputs.shift().split(" ").map(v => +v); // 과목 수와 마일리지
let subjects = []; // 성준이가 넣을 마일리지를 담을 배열.
// 입력 값이 2줄씩 주어짐!
for(let i = 0; i < n*2; i+=2){
const [P, L] = inputs[i].split(" ").map(v => +v); // 신청한 사람 수, 수강인원
const mileages = inputs[i+1].split(" ").map(v => +v).sort((a,b) => b-a); // 마일리지 내림차순 정렬
// 만약 신청한 사람 수가 수강인원 보다 적다면 최소 마일리지인 1을 넣고
if(P < L) subjects.push(1);
else subjects.push(mileages[L-1]); // 아니라면 4번째로 큰 값을 넣음.
}
// 오름차순 정렬해주고
subjects = subjects.sort((a,b) => a-b);
// 가진 마일리지에서 정렬된 배열을 순차적으로 빼주면서 답을 구한다.
let answer = 0;
for(let i = 0; i < subjects.length; i++){
if(m - subjects[i] >= 0){
answer++;
m -= subjects[i];
}
}
console.log(answer)
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 14171. Cities and States (0) | 2023.09.05 |
---|---|
[백준 알고리즘] Node.js 15810. 풍선 공장 (0) | 2023.09.01 |
[백준 알고리즘] Node.js 15671. Lemonade Line (0) | 2023.08.30 |
[백준 알고리즘] Node.js 2865. 나는 위대한 슈퍼스타K (0) | 2023.08.29 |
[프로그래머스] 주식 가격 - JavaScript (0) | 2023.08.21 |