https://www.acmicpc.net/problem/2875
그리디 알고리즘으로 분류된 대회 or 인턴 문제입니다.
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
42
43
44
45
46
47
48
49
50
51
52
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _2875
{
class Program
{
static void Main(string[] args)
{
string[] splitInput = Console.ReadLine().Split(' ');
int wCount = int.Parse(splitInput[0]);
int mCount = int.Parse(splitInput[1]);
int kCount = int.Parse(splitInput[2]);
Program p = new Program();
if (wCount > mCount * 2)
{
//여자의 수가 더 많을 때.
int diff = wCount - (mCount * 2);
Console.WriteLine(p.GetTeamCount(wCount - diff, mCount, kCount - diff));
}
else if (wCount < mCount * 2)
{
//팀을 이룰수 있는 남자의 수가 더 많을 때.
int wRemainder = wCount % 2;
int needMCount = wCount / 2;
int newKCount = kCount - (mCount - needMCount) - wRemainder;
Console.WriteLine(p.GetTeamCount(wCount - wRemainder, needMCount, newKCount));
}
else
Console.WriteLine(p.GetTeamCount(wCount, mCount, kCount));
}
public int GetTeamCount(int wCount, int mCount, int kCount)
{
if (kCount <= 0)
return mCount;
else
{
int kRemainder = (kCount % 3 == 0) ? 0 : 1;
return mCount - kCount / 3 - kRemainder;
}
}
}
}
|
우선 여자의 수, 남자의 수, 인턴쉽을 할 학생의 수를 입력 받습니다. 그 다음에 먼저한 작업은
숫자가 적은 성별을 기준으로 팀을 이룰수 있는 남자, 여자의 숫자를 맞춰주는 것입니다.
ex) 여 : 10, 남 : 3일 경우 팀을 이룰 남자의 숫자가 적으므로 여 : 6, 남 : 3까지 맞춰주며 이 과정에서 불필요한
4명의 여자를 인턴쉽에 빼주겠습니다.
여 : 21, 남 : 15일 경우 남자 5명이 남습니다. 또한 여자 1명은 팀을 이룰 수 없으므로 이를 함께 계산 했습니다.
여 : 20, 남 : 10으로 맞췄으며 버린 인원수 만큼 인턴을 보낸것으로 하고 인턴쉽 숫자에 빼주었습니다.
이 과정은 인턴쉽 숫자가 몇 명인지 관계없이 이루어지는데,
ex) 여 : 21, 남 : 15, 인턴쉽 : 3 일 경우 여 : 20, 남 : 10, 인턴쉽 : -3이 됩니다. 인턴쉽을 과하게 보내도 관계가 없는 것이 팀을 이룰 숫자가 적은 성별을 기준으로 팀은 무조건 맞춰지게 되어있기 때문입니다.
이 과정을 거치고 GetTeamCount함수를 돌리게 됩니다 이 함수에 오는 남, 여의 숫자는 위의 과정을 거친다면
(남자의 수 * 2 == 여자의 수)가 보장됩니다.
GetTeamCount에서 인턴쉽 숫자가 0보다 적다면 남자의 숫자가 곧 팀의 숫자가 되며 아니라면 인턴쉽 숫자의 3으로 나눈 몫만큼 빼주며 인턴쉽 숫자의 3으로 나눈 나머지가 0이 아니라면 1을 더 빼주었습니다.
ex) 여 : 20, 남 : 10, 인턴쉽 : 7일 경우 4명을 여자에서, 2명을 남자에서 뺄 것입니다. 또한 1명이 더 남으므로 팀 하나가 더 사라져야 합니다.
백준#1120 - 문자열 (0) | 2020.04.11 |
---|---|
백준#1541 - 잃어버린 괄호 (0) | 2020.04.11 |
백준#10610 - 30 (0) | 2020.04.10 |
백준#2217 - 로프 (0) | 2020.04.09 |
백준#2884 - 알람시계 (0) | 2020.04.09 |