본문 바로가기

알고리즘/BOJ

2875번

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


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1783번  (0) 2017.12.10
10610번  (0) 2017.12.10
11047번  (0) 2017.12.10
9466번  (0) 2017.12.09
2004번  (0) 2017.12.08