본문 바로가기
알고리즘/백준

[백준 30802] 웰컴 키트 (C++)

by fortissimo 2024. 7. 18.

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;
}