https://www.acmicpc.net/problem/30802
문제
2024년 2월 3일 개최 예정인 온사이트 그랜드 아레나에서는 참가자들에게 티셔츠 한 장과 펜 한 자루가 포함된 웰컴 키트를 나눠줄 예정입니다. 키트를 제작하는 업체는 다음과 같은 조건으로만 주문이 가능합니다.
- 티셔츠는 S, M, L, XL, XXL, 그리고 XXXL의 6가지 사이즈가 있습니다. 티셔츠는 같은 사이즈의 𝑇장 묶음으로만 주문할 수 있습니다.
- 펜은 한 종류로, 𝑃자루씩 묶음으로 주문하거나 한 자루씩 주문할 수 있습니다.
총 𝑁명의 참가자 중 S, M, L, XL, XXL, XXXL 사이즈의 티셔츠를 신청한 사람은 각각 𝑆, 𝑀, 𝐿, 𝑋𝐿, 𝑋𝑋𝐿, 𝑋𝑋𝑋𝐿명입니다. 티셔츠는 남아도 되지만 부족해서는 안 되고 신청한 사이즈대로 나눠주어야 합니다. 펜은 남거나 부족해서는 안 되고 정확히 참가자 수만큼 준비되어야 합니다.
티셔츠를 𝑇장씩 최소 몇 묶음 주문해야 하는지, 그리고 펜을 𝑃자루씩 최대 몇 묶음 주문할 수 있고, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
입력
첫 줄에 참가자의 수 𝑁이 주어집니다. (1 ≤ 𝑁 ≤ 109)
둘째 줄에 티셔츠 사이즈별 신청자의 수 𝑆, 𝑀, 𝐿, 𝑋𝐿, 𝑋𝑋𝐿, 𝑋𝑋𝑋𝐿이 공백으로 구분되어 주어집니다. (0 ≤ 𝑆, 𝑀, 𝐿, 𝑋𝐿, 𝑋𝑋𝐿, 𝑋𝑋𝑋𝐿 ≤ 𝑁; 𝑆 + 𝑀 + 𝐿 + 𝑋𝐿 + 𝑋𝑋𝐿 + 𝑋𝑋𝑋𝐿 = 𝑁)
셋째 줄에 정수 티셔츠와 펜의 묶음 수를 의미하는 정수 𝑇와 𝑃가 공백으로 구분되어 주어집니다. (2 ≤ 𝑇, 𝑃 ≤ 109)
출력
첫 줄에 티셔츠를 𝑇장씩 최소 몇 묶음 주문해야 하는지 출력하세요.
다음 줄에 펜을 𝑃자루씩 최대 몇 묶음 주문할 수 있는지와, 그 때 펜을 한 자루씩 몇 개 주문하는지 구하세요.
문제 풀이
연산 문제.
티셔츠는 각 사이즈별 T장으로 이루어진 묶음으로만 살 수 있다. 한 사이즈의 신청자 수가 x명이라고 할 때, x / T로 필요한 묶음 수를 구할 수 있다. 묶음 수는 정수이고, X / T 연산 시 나머지는 버려지므로 X가 T로 나누어 떨어지지 않는 경우 1을 추가로 더한다.
펜은 인원 수에 맞게 나누어떨어져야 하므로 묶음으로 주문하는 수 * P + 한 자루씩 주문하는 개수 = N이 성립해야 한다. 따라서 묶음으로 주문하는 수는 N / P, 한 자루씩 주문하는 개수는 N - (N / P)에 해당한다.
아래는 코드.
#include <iostream>
using namespace std;
int main()
{
long long N, T, P;
long long clothesBundleCount = 0;
long long penBundleCount = 0;
long long penEA = 0;
cin >> N;
long long* arr = new long long[6];
for (int i = 0; i < 6; i++)
{
cin >> arr[i];
}
cin >> T >> P;
for (int i = 0; i < 6; i++)
{
clothesBundleCount += arr[i] / T;
if (arr[i] % T != 0)
{
clothesBundleCount++;
}
}
penBundleCount = N / P;
penEA = N - P * penBundleCount;
cout << clothesBundleCount << "\n";
cout << penBundleCount << " " << penEA << "\n";
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11048] 이동하기 (C++) (0) | 2024.07.20 |
---|---|
[백준 3986] 좋은 단어 (C++) (0) | 2024.07.19 |
[백준 28464] Potato (C++) (0) | 2024.07.17 |
[백준 17216] 가장 큰 감소 부분 수열 (C++) (0) | 2024.07.16 |
[백준 15565] 귀여운 라이언 (C++) (0) | 2024.07.15 |