백준 2875번(파이썬):대회 or 인턴
백준 2875번 문제 정리글 입니다.
문제 출처-https://www.acmicpc.net/problem/2875
문제 내용
나의 풀이
n,m,k=map(int,input().split())
w_team,m_team=n//2,m
result=0
if n>=k and m>=k:
for i in range(k+1):
x=(n-i)//2
y=m-(k-i)
result=max(result,min(x,y))
elif n>=k and m<k:
for i in range(m+1):
x=(n-(k-i))//2
y=m-i
result=max(result,min(x,y))
elif n<k and m>=k:
for i in range(n+1):
x=(n-i)//2
y=m-(k-i)
result=max(result,min(x,y))
else:
for i in range(k-m,n+1):
x=(n-i)//2
y=m-(k-i)
result=max(result,min(x,y))
print(result)
- n과 m의 k와의 크기 관계에 따라서 4가지 조건으로 나눠준다.
- 그 후, 각 경우에 따라 반복문을 통해 k명의 인턴 참가자 수를 적절히 분배하여 최대 팀원 수를 구한다.
다른 풀이
n, m, k = map(int, input().split()) # n 여학생 수, m 남학생 수, k 인턴쉽 학생 수
result = 0
while n >= 2 and m >= 1 and n + m >= k + 3: # 2명 , 1명 팀 만들 수 있고, 인턴쉽도 보낼 수 있는 수 일때
n -= 2 # 빼주고
m -= 1 # 빼주고
result += 1 # 팀 수는 하나씩 더해준다
print(result)
너무 어렵게 생각했다..
여학생 2명, 남학생 1명이 남아 팀을 만들 수 있는 상태 + 인턴쉽 참여 인원보다 한 팀을 만들 수 있는 상태 일 때
, 반복해서 팀 수를 만들어낼 수 있게 해주면 된다…조건이 많이 주어지면, 조건에 따른 제약적 상황을 구현하도록 해야한다…