[C] New Year Snowmen
Codeforces Round #100
개수가 많은 순으로 3종류의 눈사람을 고른다.
3종류의 눈을 하나씩 뽑아 눈사람을 하나 만든다.
이 과정을 반복하면 눈사람을 최대로 만들 수 있다.
증명
답을 k라고 하자.
눈이 k개보다 많은 눈은 k개로 만들어도 된다. 어차피 초과분은 눈사람을 만드는데 쓰일 수 없기 때문에.
종류별 눈의 개수 <= k
눈사람을 k개 만들 것이므로 모든 눈의 총합은 3*k 이상이어야 한다.
전체 눈의 개수 >= 3*k
비둘기집의 원리에 의해 개수가 0이 아닌 눈종류가 항상 3종류 이상이다.
1) 눈의 개수 == k 인 눈종류가 3종류 이상인 경우
항상 확정적으로 k개의 눈사람을 만들 수 있다.
2) 눈의 개수 == k 인 눈종류가 2종류 이하인 경우
위의 알고리즘을 한번 수행하면 눈의 개수 == k 인 눈종류가 반드시 사라진다.
종류별 눈의 개수 <= k-1
전체 눈의 개수 >= 3*(k-1)
이건 답이 k-1일 때의 상황과 같다.
따라서 위 과정을 k번 반복하면 눈사람을 k개 만들 수 있게 된다.