2875번 - 대회 or 인턴
문제 분류에 그리디 알고리즘인데.. 그리디 알고리즘이 맞는지 모르겠다 내가 푼 방식이..
나는 우선 주어진 N,M에서 가장 많이 만들 수 있는 팀의 수를 만들었다.
여자와 남자 비율이 2:1로 팀을 이루어야 하기 때문에,
모든 남자를 팀에 속할 경우는 N>=2*M 보다 커야 팀이 M개가 생기게 된다.
반대로 N<2*M 인 경우에는 팀을 여자의 숫자에 맞추게 되므로 N/2개가 생기게 된다.
이때 남는 숫자들을 체크하고 이게 K보다 같거나 커질 때까지 팀을 하나씩 줄이면서 계산하면 된다.
<정답 코드>
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 41 | #include<iostream> using namespace std; int main() { int N, M, K; cin >> N >> M >> K; int left = 0; int team = 0; if (N >= 2 * M) { left = N - 2 * M; team = M; } else { if (N % 2 == 0) { left = M - (N / 2); team = N / 2; } else { left = M - (N / 2) + 1; team = N / 2; } } while (left < K) { left += 3; team -= 1; } cout << team << endl; return 0; } | cs |
반응형