https://www.acmicpc.net/problem/30802
문제
2024년 2월 3일 개최 예정인 온사이트 그랜드 아레나에서는 참가자들에게 티셔츠 한 장과 펜 한 자루가 포함된 웰컴 키트를 나눠줄 예정입니다. 키트를 제작하는 업체는 다음과 같은 조건으로만 주문이 가능합니다.
* 티셔츠는 S, M, L, XL, XXL, 그리고 XXXL의 6가지 사이즈가 있습니다. 티셔츠는 같은 사이즈의 T장 묶음으로만 주문할 수 있습니다.
* 펜은 한 종류로, P자루씩 묶음으로 주문하거나 한 자루씩 주문할 수 있습니다.
총 N명의 참가자 중 S, M, L, XL, XXL, XXXL 사이즈의 티셔츠를 신청한 사람은 각각 S,M,L,XL,XXL,XXXL명입니다. 티셔츠는 남아도 되지만 부족해서는 안 되고 신청한 사이즈대로 나눠주어야 합니다. 펜은 남거나 부족해서는 안 되고 정확히 참가자 수만큼 준비되어야 합니다.
티셔츠를 T장씩 최소 몇 묶음 주문해야 하는지, 그리고 펜을 P자루씩 최대 몇 묶음 주문할 수 있고, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
입력
첫 줄에 참가자의 수 N이 주어집니다. (1 ≤ N ≤ 10^9)
둘째 줄에 티셔츠 사이즈별 신청자의 수 S,M,L,XL,XXL,XXXL이 공백으로 구분되어 주어집니다.
(0 ≤ S, M, L, XL, XXL, XXXL ≤ N; S + M + L + XL + XXL + XXXL = N)
셋째 줄에 정수 티셔츠와 펜의 묶음 수를 의미하는 정수 T와 P가 공백으로 구분되어 주어집니다. (2 ≤ T, P ≤ 10^9)
출력
첫 줄에 티셔츠를 T장씩 최소 몇 묶음 주문해야 하는지 출력하세요.
다음 줄에 펜을 P자루씩 최대 몇 묶음 주문할 수 있는지와, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
조건 정리
1. 첫 줄에 참가자의 수 N
2. 둘째 줄에 티셔츠 사이즈별 신청자 수
3. 셋째 줄에 티셔츠를 몇 묶음씩 주문해야 하는지, 펜을 몇 묶음씩 주문해야 하는지가 주어짐
4. 티셔츠 신청을 하지 않은 경우는 주문하지 않음 (ex. XL사이즈가 0인 경우)
5. 티셔츠는 주문한 사람 수 보다 같거나 많을 수 있지만 적으면 안됌
6. 펜은 묶음으로 주문하고 남는다면 개별로 시킬 수 있음
코드
const fs = require('fs');
const file_path = process.platform === 'linux' ? 'dev/stdin' : `${__dirname}/input.txt`
const input = fs.readFileSync(file_path).toString().trim();
/**
* @param {string} input
* @returns
*/
const solution = (input) => {
const [entrant, size_str, shirt_pen] = input.replace(/\r/g, '').split('\n');
const n = Number(entrant);
const size = size_str.split(' ').map(Number);
const [t, p] = shirt_pen.split(' ').map(Number);
const result = size.reduce((acc ,cur) => acc += Math.ceil(cur / t), 0);
const bundle_p = Math.floor(n / p);
const ea = n % p;
const answer = `${result}\n${bundle_p} ${ea}`;
return answer;
}
console.log(solution(input));
해설
예제 입력에서 N = 23, 신청자의 수 (size) = [3, 1, 4, 1, 5, 9], T = 5, P = 7이 주어진다.
T가 5이므로 size 배열의 각 요소에서 나눗셈의 몫에 소수점 올림한 값을 모두 더한게 주문해야 하는 티셔츠의 묶음 수이다.
P가 7이므로 N에서 P를 나눈 몫의 소수점 내림을 한 값이 주문해야 하는 펜의 묶음 수이며, N과 P 나눗셈의 나머지가 개별로 주문해야 하는 펜의 수이다.
'코딩테스트 > 백준' 카테고리의 다른 글
11650. 좌표 정렬하기 - Node.js (1) | 2024.09.28 |
---|---|
2232. 분해합 - Node.js (4) | 2024.09.23 |
1978. 소수 찾기 - Node.js (0) | 2024.09.20 |
4153. 직각삼각형 - Node.js (0) | 2024.09.20 |
1312. 소수 - Node.js (0) | 2024.09.19 |