아레나 참가자들에게 티셔츠와 펜 묶음을 나눠주기 위해서, 티셔츠 묶음과 펜 묶음그리고 펜 자루를 몇 개씩 주문해야 하는지 출력하는 문제이다. 참고로, 티셔츠는 사이즈별로 구분되어 있다.
예를들어, S사이즈의 인원이 3명, M사이즈의 인원이 9명이 있고, 티셔츠 묶음은 5라고 했을 때, S사이즈는 1번 주문 해야하고, M사이즈는 2번 주문해서, 총 3번의 티셔츠 묶음을 주문한다. 그리고 이를 3으로 출력한다.
펜은 남거나 부족하면 안되므로, 몇 묶음 + 몇 자루 주문할지를 결정해야 한다.
예를 들어, 참가 인원이 11명이고, 펜 묶음이 5, 펜 자루가 1이라면, 펜 묶음을 2번, 펜 자루를 1번 주문해서 이를 2 1로 출력해야 한다.
나누기와 나머지 연산자를 통해 몇 묶음을 주문해야 하는지 구할 수 있다.
올림처리를 통해 나누어 떨어졌을 때의 예외상황을 신경쓰지 않아도된다.
a[i] / t; // 올림처리를 안하는 일반적인 나누기
(a[i] + t - 1) / t; // 올림처리
// 아래의 코드는 dev c++환경에서 동작됩니다.
// visual studio에서는 bit/stdc++.h가 기본적으로 없기 때문에
// 정삭적인 작동이 되지 않을 수 있습니다.
#include <iostream>
using namespace std;
int n, a[6], t, p, ret;
int main()
{
ios::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for(int i = 0; i < 6; i++)
{
cin >> a[i];
}
cin >> t >> p;
for(int i = 0; i < 6; i++)
{
// 올림처리
ret += (a[i] + t - 1) / t;
}
cout << ret << "\\n";
cout << n / p << " " << n % p;
return 0;
}
원래는 s / t + 1과 같은 방법을 통해서 묶음 문제를 해결했었는데, 저렇게 올림처리를 하면 나누어 떨어졌을 때의 예외처리를 하지 않아도되서, 코드가 많이 간결해져서 참 좋은 방법인 것 같다.