⚙️ 알고리즘/백준

[Swift] 백준 2895 - 대회 or 인턴

dev_zoe 2023. 1. 26. 00:23
반응형

문제 링크

https://www.acmicpc.net/problem/2875

 

코드

let input = readLine()!.split(separator:" ").map { Int($0)! }
var woman = input[0]
var man = input[1]
let intern = input[2]

for _ in 0..<intern{
  if man <= woman/2 {
    woman -= 1
  }
  else{
    man -= 1
  }
}

print(min(woman/2, man))

 

풀이

먼저, K명 만큼 반드시 인턴을 보내야하므로 어떻게 남자, 여자에서 고르게 인원을 빼내면 팀의 갯수를 최대로 만들 수 있을지 고민해야한다. 우선, 팀을 구성할 수 있는 최대값은 N/2, M 중 작은 값과 같다.

N/2, M을 비교하기 전에 이를 최대값으로 만들도록 K를 적절하게 뺼 필요가 있다.

만약 N/2가 M보다 크거나 같으면 N에서 1을 빼주고, 그렇지 않으면 M에서 1을 빼는 것을 반복한다.

반복이 끝난 후에 N/2과 M 중 작은 값을 선택한다. (작은값을 선택하는 이유는 여자가 2명 있어야만 팀이 결성되는데, 남자는 1명만 있어도 되기 때문에 더 작은값을 골라야 결성할 수 있는 값의 최대값이 나옴)

반응형