연습장/백준(BOJ) 문제풀이
[백준 1049] 기타줄 with Node.js
Tesseractjh
2021. 5. 2. 22:17
문제 링크
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
풀이
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/);
const n = +input[0];
const m = +input[1];
const arr = input.slice(2).map(v => +v);
const pkgPrice = [];
const pcPrice = [];
for (let i=0; i<m; i++) {
pkgPrice.push(arr[2*i]);
pcPrice.push(arr[2*i+1]);
}
const pkgMin = pkgPrice.reduce((acc, v) => acc < v ? acc : v, 1000);
const pcMin = pcPrice.reduce((acc, v) => acc < v ? acc : v, 1000);
const pkgCount = Math.floor(n/6);
const pcCount = n-6*pkgCount;
let cost;
if (pkgMin/6 < pcMin) {
cost = pkgCount*pkgMin + (pcCount*pcMin < pkgMin ? pcCount*pcMin : pkgMin);
} else {
cost = n*pcMin;
}
console.log(cost);
주어진 기타줄 패키지와 낱개 가격 중에서 각각 최솟값을 찾는다.
패키지 최솟값을 6으로 나눈 값이 낱개 최솟값보다 크다면(패키지 효율이 오히려 더 안 좋다면), 낱개 가격으로 N개의 기타줄을 모두 구입하면 된다.
패키지 최솟값을 6으로 나눈 값이 낱개 최솟값보다 작다면, 먼저 패키지를 기타줄 총합 N개를 넘지 않는 최대로 구입을 하고, 나머지 기타줄(6개 미만)의 가격을 패키지 1개로 산 것과 낱개로 산 것의 가격을 비교하여 더 낮은 가격으로 구입한다.