문제
https://www.acmicpc.net/problem/3213
문제해설
N명의 친구들이 피자를 먹는다.
친구들은 1/4, 1/2, 3/4 판을 먹을 수 있다.
다만 1/2을 먹는 친구 2명이서 한판을 나눠 먹을 수는 있지만
3/4를 먹는 2명과 1/2을 먹는 1명이 2판을 먹을 수는 없다.
1/2를 먹는 친구가 1/4와 1/4로 나눠서 먹을 수는 없다는 소리이다.
친구들이 최소 몇 판을 시켜야 다 먹을 수 있는지 구하면 된다.
문제풀이
문제 설명이 너무 불친절하게 나와있어서 힘들었다.
아무리 생각해봐도 일부러 이런식으로 난이도를 높인다고밖에 생각이 안든다.
아무튼 1/2끼리 짝지어서 개수를 ++해주고
그 다음은 1/4와 3/4을 짝지어서 개수를 세어줬다.
그리고 1/2와 1/4를 계산해주고
남은 3/4를 더해주고 나머지 애들도 더해주었다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n; cin >> n;
vector<int>arr(3, 0);
for (int i = 0; i < n; i++) {
char a, b, c; cin >> a >> b >> c;
if (a == '1') {
if (c == '4')
arr[0]++;
else
arr[1]++;
}
else
arr[2]++;
}
int sum = arr[1] / 2;
arr[1] -= sum * 2;
int tmp = min(arr[0], arr[2]);
arr[0] -= tmp; arr[2] -= tmp;
sum += tmp;
tmp = min(arr[0], arr[1]);
arr[0] -= tmp; arr[1] -= tmp;
sum += tmp;
tmp = arr[0] / 4;
sum += tmp;
arr[0] -= tmp * 4;
if (arr[0])
sum++;
sum += (arr[2] + arr[1]);
cout << sum;
return 0;
}