shinbian11   2년 전

k 가 0인 경우는 min(n / 2, m) 팀이 나올 수 있다는 것은 이해햇는데,

k가 0이 아닌 경우는 왜 (n + m - k) / 3 팀이 가능한것인가요?

n은 항상 2명씩, m은 항상 1명씩 세트로 모아서 1팀이 된다고 했으니, 무언가 이 부분에 대한 처리가 따로따로(?) 되어야 할 것 같은데, 그냥 교집합의 원소 개수 구하듯이 그냥 n+m 한다음에 k를 뺀것에 3으로 나누면 k가 0이 아닐때에 만들 수 있는 최소 팀의 개수가 나오는 이유가 궁금합니다.

lcr7324   2년 전

일단 오해하고 계신 부분 하나를 정리하자면, k가 0일 때와 0이 아닐 때를 나눠서 처리하고 있는 것이 아닙니다.

올리신 코드는 다음의 세 수 중 가장 작은 값을 출력하는 코드입니다.

n/2, m, (n+m-k)/3

엄밀하지 않지만 대강 컨셉만 말씀드리자면 순서대로 여자 수 때문에 최대 팀 수가 제한되는 경우, 남자 수 때문에 최대 팀 수가 제한되는 경우, 앞의 두 경우가 문제가 아닌 경우로 볼 수 있습니다.

마지막 경우는 어떻게든 성비를 맞춰서 팀 구성을 할 수 있다고 할 때 최대 몇 팀이 가능할까를 생각해보면 대회 참여 가능 인원 n+m-k 를 팀당 인원 3으로 나누면 됩니다. 안되는 경우는 어떡해요? 라는 질문은 그 경우는 앞의 둘에서 무조건 걸러진다고 답변할 수 있겠습니다. (이 부분이 제 답변이 엄밀하지 못한 부분입니다)

마지막 경우를 약간 다르게 생각해보면, k가 충분히 크면 남자에서 적당히 빼고 여자에서 적당히 빼는 걸 잘 나누면 어찌어찌 (n+m-k)/3 팀을 무조건 맞출 수 있다고 생각하셔도 되겠습니다.

shinbian11   2년 전

감사합니다!!!

댓글을 작성하려면 로그인해야 합니다.